我需要加载一个放在不同进程的资源dll中的字符串,前提是该进程将在调用时运行。
我尝试了以下代码 -
HMODULE hRes = ::LoadLibrary(_T("SomeResource.dll"));
TCHAR buffer[50];
::LoadString(hRes, IDS_SOME_ID, buffer, 50);
此代码在调试模式下运行时工作正常。 但在发布模式下,LoadLibrary返回零。为什么呢?
我错过了什么吗?请帮帮我。
我正在使用VC7.1编译器。
答案 0 :(得分:1)
这可能是查找 "SomeResource.dll"
的问题。从调试器运行时,可执行文件从项目的路径启动。如果可以从那里找到DLL。没关系。从IDE外部运行时,可执行文件从另一个文件夹启动。它无法从那里找到DLL。
答案 1 :(得分:0)
我不是假装回答,但可以请添加以下代码来诊断问题:
if( hRes == 0 ){
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
MessageBox(NULL, (LPTSTR)lpMsgBuf, "Error", MB_OK);
LocalFree(lpMsgBuf);
}