如何从不同进程的资源加载字符串?

时间:2010-07-28 07:29:18

标签: c++ visual-c++ mfc

我需要加载一个放在不同进程的资源dll中的字符串,前提是该进程将在调用时运行。

我尝试了以下代码 -

    HMODULE hRes = ::LoadLibrary(_T("SomeResource.dll"));

    TCHAR buffer[50];
    ::LoadString(hRes, IDS_SOME_ID, buffer, 50);

此代码在调试模式下运行时工作正常。 但在发布模式下,LoadLibrary返回零。为什么呢?

我错过了什么吗?请帮帮我。

我正在使用VC7.1编译器。

2 个答案:

答案 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);
}