- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将 MapViewOfFile 的返回值(据我所知是指向 void 的指针)“强制转换”到我自己的类,以便我能够使用该对象。我知道内存的结构。 headerSize 位于字节号 4 到字节号 8,字节中写入一个十六进制值,例如十六进制 47,因此大小应为 71 字节。我想获得 71 作为属性“headerSize”的值。什么代码必须替换我的代码段中的“TODO”?我不知道如何读取字节以及如何创建属性。
main.cpp 中的代码:
// MapViewOfFile return a pointer to void, so you need to cast it to a suitable structure
pBuf = (FILE*) MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
// create object
JobaShm jobaShm(pBuf);
int headerSize = jobaShm.getHeaderSize();
std::cout << " HeaderSize " << headerSize << ";\n";
jobashm.h中的代码
#ifndef JOBASHM_H
#define JOBASHM
class JobaShm {
public:
JobaShm(FILE* handle);
int getHeaderSize();
private:
int headerSize;
};
#endif
jobashm.cpp 中的代码
#include <stdio.h>
#include "jobashm.h"
JobaShm::JobaShm(FILE* handle){
// TODO
}
int JobaShm::getHeaderSize(){
return headerSize;
}
更新:由于本教程 http://www.cplusplus.com/forum/general/54381/我正在尝试将 MapViewOfFile 的返回值转换为我自己的结构。
主要.cpp
struct Shm {
int firstByte;
};
int main(void){
std::cout << "*** Start SharedMemory ***\n";
HANDLE hMapFile;
hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szName);
if (hMapFile == NULL){
MessageBox(NULL, TEXT("Could not open file mapping object"), TEXT("ERROR"), MB_OK);
return 1;
}
Shm * pBuf = (Shm *) MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE); // ggf. besser size_of Shm, statt BUF_SIZE
std::cout << " Debug " << pBuf->firstByte << ";\n";
UnmapViewOfFile(&pBuf);
CloseHandle(hMapFile);
std::cout << "*** close app by typing a number. ***\n";
int a = 0;
cin >> a;
return 0;
}
最佳答案
我认为您必须阅读有关 MapViewOfFile 的更多信息。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx
它返回一个指向数据的指针。
LPCTSTR pBuf;
pBuf = (LPTSTR) MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
JobaShm(pBuf)
既然你知道数据是什么,你应该为它创建一个结构并转换它。
struct FileData {
int space;
int headerSize;
// etc...
}
JobaShm::JobaShm(LPTSTR* pBuf) {
FileData fd;
CopyMemory((PVOID)pBuf, &fd, sizeof(fd));
headerSize = fd.headerSize;
}
关于c++ - 从 MapViewOfFile() 的返回值构造自己的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19775269/
如果我在同一进程中为同一文件创建 2 个单独的映射,指针是否会共享? 换句话说: LPCTSTR filename = //... HANDLE file1 = CreateFile(filename
如果我在同一进程中为同一文件创建 2 个单独的映射,指针是否会共享? 换句话说: LPCTSTR filename = //... HANDLE file1 = CreateFile(filename
所以我试图将一个整数 a =3 从服务器端传递到客户端。问题是,当我在客户端执行消息 printf 时,显示的值不是 3,而是一个随机数(某些值)就像 19923)。我试图在服务器端通过值(&a)传递
我正在尝试使用 VS2010 在 Windows 上对文件进行内存映射。我在 DLL 中执行此操作。DLL 的第一个实例可以很好地映射文件。同一进程中的第二个实例导致 *ppvData = ::Map
我正在尝试通过共享内存为学校作业实现 IPC。我创建了一个名为 SharedMemoryBuffer 的类来处理创建文件映射和 View 。 我的 Init() 函数如下所示: BYTE * Shar
使用 win32api,我希望下面的程序创建两个进程并创建一个文件映射。 (使用 C++) 我不知道我应该在 Handle CreateFileMapping(....我试过: PROCCESS_IN
早上好,MapViewOfFile 有可能返回同一个地址两次吗?但是,UnmapViewOfFile 在必须取消映射同一地址两次时会出现错误。我们收到错误 487:地址无效。下面是一些伪代码,展示了我
我有一些使用 MapViewOfFile 共享数据的程序,但我遇到了奇怪的访问冲突,这似乎是由于访问映射文件数据造成的。 一些共享数据有指针,但是这些指针只被一个进程设置和使用,而是由进程内的多个线程
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why won't the loader load at the desired location “Map
我基本上试图将我的结构转换或复制到我的其他进程部分 View ,但我不断收到错误 C2760: syntax error: unexpected token 'identifier', expecte
我想将 MapViewOfFile 的返回值(据我所知是指向 void 的指针)“强制转换”到我自己的类,以便我能够使用该对象。我知道内存的结构。 headerSize 位于字节号 4 到字节号 8,
如何使用 CreateFileMapping 和 MapViewOfFile 将共享内存分配给静态缓冲区,如下所示。 #pragma data_seg(".ABC") __declspec (dlle
我正在尝试使用需要 DWORD 的函数。 这些是规范: dwFileOffsetHigh [in] A high-order DWORD of the file offset where the vi
您好 StackOverflow 的用户。 我一直在使用 C++ 中 Win32 API 的 MapViewOfFile,我是它的新手,但我一直在尝试为 mapview 文件创建一个信号量,所以一个实
下午好,众所周知,在处理大文件时无法映射到 Win32 中的一个 View ,创建仔细映射的代码并根据需要取消映射文件区域。 pastebin 网址是: 我创建并测试了一个处理大文件的 cMemory
``我正在努力做我的家庭作业,但我无法继续,需要你的帮助。我有两个使用相同文件 (log.txt) 的进程。当我尝试同时写一些东西时,它会覆盖并且只有一个进程写入 txt。 这是我的创作过程, ent
开发游戏(PT 中的“jogo”), 服务器最多可以同时运行 5 个游戏, 客户端将通过映射内存访问。 这就是我所拥有的: 服务器: #define MAX_JOGOS 5 typedef struc
以下代码是否会将文件中的数据加载到系统内存中,以便访问结果指针永远不会阻塞线程? auto ptr = VirtualLock(MapViewOfFile(file_map, FILE_MAP_REA
我有一个非常大的文件,我需要分成小块读取它,然后处理每一 block 。我正在使用 MapViewOfFile 函数在内存中映射一 block ,但在阅读第一部分后我无法阅读第二部分。当我尝试映射它时
只是想知道我是否正在像这样在 Windows 平台上创建共享内存阵列: HANDLE hFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAG
我是一名优秀的程序员,十分优秀!