Win32 DLL内的C++ +Load STRIN()不工作

Win32 DLL内的C++ +Load STRIN()不工作,c++,winapi,dll,resources,C++,Winapi,Dll,Resources,因此,我有一个带有tbl.rc文件的win32 DLL,其中包含以下代码: STRINGTABLE BEGIN 1 "Hola!" END 在我的生活中,我正在做这样的事情 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("St

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

STRINGTABLE
BEGIN
   1 "Hola!"
END
在我的生活中,我正在做这样的事情

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);
然而,我的输出总是

当然,我想知道为什么以及如何修复它。多谢各位

我认为LoadString失败了,您应该检查它的返回值和GetLastError。如果你打电话给德莱曼,它就失败了。在保持加载程序锁的同时调用DllMain,因此对可以在DllMain中调用的函数施加了很大的限制

根据MSDN:

切勿在DllMain中执行以下任务: ... •调用User32.dll或Gdi32.dll中的函数。某些函数加载另一个可能未初始化的DLL

for LoadString显示它是一个User32.dll函数

解决此问题的方法:

从DllMain中删除LoadString调用

在DLL中有一个函数,它将按需加载并返回字符串


尝试用谷歌搜索以null结尾的字符串。此外,LoadString的文档还解释了如何确定失败的原因。您好!有6个字符,忘记零终止符是一个标准错误。不检查错误是另一个问题。即使我将其设置为6,它也不起作用:/Check LoadString的返回值。如果它为零,您可以使用GetLastError找出它失败的原因。始终阅读API文档以了解函数返回的内容,然后检查该返回值。如果我创建了另一个函数,我将如何继续传递HINSTANCE?最后一个错误使用printfLAST错误%X\n,GetLastError;打印714;。printfLAST错误%X\n,LoadString/*太懒,无法键入参数*/;返回上一个错误0。注意:当FDFREASON为DLL\U PROCESS\U ATTACH时,在DllMain外部运行代码时,这些输出会返回,HINSTANCE存储在DllMain的变量中,HINSTANCE存储在全局变量的hinstDLL中,然后像往常一样使用它。LoadString返回值0表示未找到字符串资源。因此,请检查.dll文件是否确实包含该字符串。还有GetLastError返回什么?是否在LoadString之后立即调用GetLastError?例如:结果=加载字符串。。。error=GetLastErrorGetLastError返回714,如上所述,是的,我在LoadString之后立即调用它。DLL确实包含字符串,尽管十六进制编辑器这么说
String is