读书人

在DLL中 LoadString为什么会失败?解决

发布时间: 2012-01-19 00:22:28 作者: rapoo

在DLL中 LoadString为什么会失败?
我在DLL中做了一个字符串表,然后动态创建菜单,菜单标题就是字符串表里的值

我用了两种loadstring都失败了,csting 和 API中的 loadstring 都未读出来。

调试跟踪时到这语句时 报的问题的是 指定资源错误或不存在之类的提示。

这是为什么呢??? 迷茫ing……

[解决办法]
int LoadString(
HINSTANCE hInstance,
UINT uID,
LPTSTR lpBuffer,
int cchBufferMax
);

可能是hInstance指定的不对, 资源在DLL中, hInstance应该是那个DLL的HANDLE, 而不是它的客户EXE的HANDLE
[解决办法]
在DLL的输出函数的开始应该要加上AFX_MANAGE_STATE(AfxGetStaticModuleState());来切换Module State。当前的resource handle是在Module State中保存的,LoadString需要这个Resource Handle来知道应该在那个Module中Load resource,不切换就会出现找不到资源的错误。正确的代码如下:
void MyDllExportedFunc()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// ...
}

读书人网 >VC/MFC

热点推荐