在副线程中LoadString失败解决办法

原创 2013年12月02日 10:46:33

         今天在项目中遇到一个问题:CString对象调用字符串资源ID老是返回失败,调试发现LoadString函数找不到资源ID对应的字符

资源,但是工程中其他地方调用Loadstring是正常的,所有一系列的对比调试,还是没有解决问题。

后来网上查询和咨询同事,得到线索:可能是线程调用问题;找到问题索引后再到网上查询,果然有前辈解答:

在COM组件中的调用函数的开始应该要加上AFX_MANAGE_STATE(AfxGetStaticModuleState()),来切换Module State。当前的resource handle是在Module State中保存的,LoadString需要这个Resource Handle来知道应该在那个Module中Load resource,不切换就会出现找不到资源的错误。正确的代码如下:
void MyDllExportedFunc()
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    // ...
}

我的工程是COM组件类型,在开启副线程中调用Loadstring失败,以上方法可以解决此类问题,

在主线程中调用AfxGetResourceHandle()函数,保存资源句柄。在工作者线程中调用AfxSetResourceHandle函数设置主线程保存的资源句柄也可以解决此问题。

希望可以帮助和我遇到类似问题的朋友。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

CString的两种LoadString

CString aa; 1.bool aaa = aa.LoadString(IDS_STATUS_DATA); 如果不能成功的话,就试一下: 2.bool aaa = aa.LoadStr...

CString对象的一种错误的使用方式

我现在做的系统有的时候会出现这样的断言失败: Debug Error! DAMAGE: after Normal block (#328Array) at 0x182C30F0. 跟踪一下,发...

VS2008安装失败解决办法

  • 2014-01-13 22:28
  • 26KB
  • 下载

cordova 非UI线程更新UI闪退的解决办法

最近在用Cordova 做项目,需要在html页面中更新Tab

Salt因为握手不成功报错[要求增加线程]解决办法

Salt request timed out. The master is not responding. If this error persists after verifying the mas...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)