我正在尝试从资源中读取char指针/字符串,然后从messagebox中显示它。然而它似乎是空白的,我不知道我是否正确阅读它。
这是我的资源:
这是我用来阅读它的代码:
void main()
{
HGLOBAL G1, G2;
HMODULE hMod = GetModuleHandle(NULL);
G1 = LoadResource(hMod, FindResource(NULL, MAKEINTRESOURCE(RT_RCDATA), "RESOURCE1"));
G2 = LoadResource(hMod, FindResource(NULL, MAKEINTRESOURCE(RT_RCDATA), "RESOURCE2"));
//G1 = LoadResource(NULL, FindResource(NULL, "RCData", "RESOURCE1"));
//G2 = LoadResource(NULL, FindResource(NULL, "RCData", "RESOURCE2"));
MessageBoxA(NULL, (char*)LockResource(G1), (char*)LockResource(G1), MB_OK);
MessageBoxA(NULL, (char*)LockResource(G2), (char*)LockResource(G2), MB_OK);
/*char *strURL;
HMODULE hModule = GetModuleHandle(NULL);
HRSRC hResource = FindResource(hModule, "RESOURCE1", "RCData"); //HRSRC hResource = FindResource(hModule, "RCData", "RESOURCE1");
HGLOBAL hMemory = LoadResource(hModule, hResource);
DWORD dwSize = SizeofResource(hModule, hResource);
LPVOID lpAddress = LockResource(hMemory);
memcpy(strURL, lpAddress, dwSize);
MessageBoxA(0, strURL, strURL, MB_OK);*/
ExitProcess(0);
}
评论的部分是我尝试正确阅读的替代品。出了什么问题?我知道RT_RCDATA
不正确,因为在资源中它显然"RCDATA"
但我还尝试在引号中使用LPCSTR
,但这也没有帮助。
另外,我没有发布资源(FreeResource),因为这就是MSDN所说的:
此功能已过时,仅支持向后兼容16位Windows。对于32位Windows应用程序,不必释放使用LoadResource加载的资源。
出了什么问题或我做错了什么?
编辑:错误的标签,因为显然我需要某种声誉为此添加正确的标签,这对我来说绝对没有意义。
答案 0 :(得分:1)
您可以像这样使用LoadString WinAPI:
HMODULE hMod = GetModuleHandle(NULL);
char myString[512];
LoadString(hMod, IDS_STRING101, myString, 512);
MessageBox(NULL, myString, "", MB_OK);
IDS_STRING101已在.rc文件中定义