【发布时间】:2017-04-05 18:55:03
【问题描述】:
来自资源的文件被传递给函数 Change ,该函数应该对每个字节值进行异或,但随后出现写访问冲突错误。
INT CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR lpCmdLine, INT nCmdShow)
{
HRSRC hRes = FindResource(NULL, L"FILE", RT_RCDATA);
if (hRes == NULL)
{
// print error
}
DWORD resSize = SizeofResource(NULL, hRes);
HGLOBAL resData = LoadResource(NULL, hRes);
byte *file = reinterpret_cast<byte*>(LockResource(resData));
Change(file, resSize);
return 0;
}
void Change(byte *data, int size)
{
for (int i = 0; i < size; ++i)
{
data[i] ^= 2;
}
}
【问题讨论】:
-
您检查
LockResource的返回值以确保它不为空吗? -
在内存窗口中,我可以看到文件变量包含我文件中的字节。
-
资源位于可执行文件的只读段中。您不能修改资源占用的内存。
标签: c++ winapi visual-c++