所以我有一个带有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
当然,我想知道为什么以及如何解决这个问题。非常感谢你!
答案 0 :(得分:0)
我认为LoadString()
失败了(你应该检查它的返回值和GetLastError()
)。如果您在DllMain()
中调用它,则会失败。在持有加载程序锁定时调用DllMain()
,因此对DllMain()
中可以调用的函数施加了很大的限制。
根据MSDN:
Dynamic-Link Library Best Practices
你绝不应该在DllMain中执行以下任务:
...
•调用User32.dll或Gdi32.dll中的函数。某些函数加载另一个DLL,可能无法初始化。
LoadString()
的{{3}}表示它是User32.dll函数。
解决此问题的方法:
从LoadString()
移除DllMain()
来电。
在你的DLL中有一个函数,它将按需加载和返回字符串。