gpt4 book ai didi

c++ - 从 MapViewOfFile() 的返回值构造自己的对象

转载 作者:行者123 更新时间:2023-11-28 07:19:08 25 4
gpt4 key购买 nike

我想将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com