来自资源数据的C / C ++ Messagebox

时间:2014-03-03 14:31:40

标签: c++ c string resources

我正在尝试从资源中读取char指针/字符串,然后从messagebox中显示它。然而它似乎是空白的,我不知道我是否正确阅读它。

这是我的资源:

Resources

这是我用来阅读它的代码:

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加载的资源。

出了什么问题或我做错了什么?

编辑:错误的标签,因为显然我需要某种声誉为此添加正确的标签,这对我来说绝对没有意义。

1 个答案:

答案 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文件中定义