从 MapViewOfFile() 的返回值构造自己的对象
Construct own object from return value of MapViewOfFile()
我想将 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++从对象自己的类中删除对象
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- C++自己的对象堆栈.在 push() 上复制了什么?
- 鼠标单击 OpenGL 时无法围绕其自己的中心旋转对象
- C++ 在其自己的类中创建对象的修改副本
- 如何为C++映射创建自己的字符串比较对象
- 添加 swig pythoncode 以在 Python 对象上设置自己的标志
- 我是否可以像访问自己的对象一样访问对象的'base part'?
- 强制派生的类对象使用自己的功能,而不是基类功能
- 具有自己的链表的对象
- 将一个常量cstring附加到我自己的String类对象
- 从 MapViewOfFile() 的返回值构造自己的对象
- 无法编译.头文件.包含自己的对象定义
- 将我自己的对象添加到 QComboBox,Q_DECLARE_METATYPE,不完整的类型'QStaticAssertFailure<false>'
- cpp 对象方法是否有自己的堆栈帧
- 为什么我们需要维护自己的矩阵来转换游戏对象
- C++:一个类可以有它自己的类型的对象吗?
- 如何将 json c++ 与我自己的对象一起使用