我正在重用一些旧代码(最初是在 c 上开发的,而不是 c++),并带有一些打开/读取/操作文本文件的功能。文本文件的路径作为字符串 (char*) 传递给函数,然后使用:打开,FileToUse = fopen(filename, "rb");
然后多次调用fread()
和fseek()
使用。众所周知,此代码适用于外部文本文件,但现在我想将文本文件作为资源包含在我的项目中(Visual Studio 中的 MFC C++)。
我在网上找到了一些关于如何使用此代码中的资源的示例:
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hResource = FindResource(hInst, MAKEINTRESOURCE(IDR_TEXTFILE1), "TEXTFILE");
if (hResource){
HGLOBAL hLoadedResource = LoadResource(hInst, hResource);
if (hLoadedResource){
const char* pResource = LockResource(hLoadedResource);
if (pResource){
DWORD dwResourceSize = SizeofResource(hInst, hResource);
if (0 != dwResourceSize){ // if(FileToUse){
memcpy(&Buffer, pResource, (15 * 2)); // fread($Buffer, 15, 2, FileToUse);
pTemp = pResource + 200; // fseek(FileToUse, 200, SEEK_SET);
pTemp = pTemp + 100; // fseek(FileToUse, 100, SEEK_CUR);
pTemp = pResource + (dwResourceSize - 1) - 40; // fseek(FileToUse, -40, SEEK_END);
}
}
}
}
如图所示,我用 memcpy() 替换了 fread 调用,但是我缺少 fread 的返回值(实际读取的项目),并且在原始代码中,文件指针被 fseek 移动了,我想知道我使用临时指针的方法是否正确.
我的最终目标是模拟对具有相似函数原型的资源的 fread 和 fseek 调用:
size_t resread( void* buffer, size_t size, size_t count, char* resource );
int resseek( char* resource, long offset, int origin );
任何建议都非常感谢。