C ++ - win32 DLL中的LoadString()不起作用

时间:2014-10-31 11:41:41

标签: c++ winapi dll resources

所以我有一个带有tbl.rc文件的win32 DLL,其中包含以下代码:

STRINGTABLE
BEGIN
   1 "Hola!"
END

在我的DLLMain中,我正在做这样的事情

char* strt = new char[5];
LoadString(hinstDLL, 1, strt, 5); // "hinstDLL" is a parameter passed by DLLMain, which SHOULD be the HINSTANCE of the DLL
printf("String is %s", strt);

但是,我的输出始终

String is

当然,我想知道为什么以及如何解决这个问题。非常感谢你!

1 个答案:

答案 0 :(得分:0)

我认为LoadString()失败了(你应该检查它的返回值和GetLastError())。如果您在DllMain()中调用它,则会失败。在持有加载程序锁定时调用DllMain(),因此对DllMain()中可以调用的函数施加了很大的限制。

根据MSDN:

Dynamic-Link Library Best Practices

  

你绝不应该在DllMain中执行以下任务:
  ...
  •调用User32.dll或Gdi32.dll中的函数。某些函数加载另一个DLL,可能无法初始化。

LoadString()的{​​{3}}表示它是User32.dll函数。

解决此问题的方法:

  1. LoadString()移除DllMain()来电。

  2. 在你的DLL中有一个函数,它将按需加载和返回字符串。