使用boost库的mfc程序调用C#类库碰到的问题 - 续集

欢迎大家关注我的公*号:embedded_bug

书接上回,boost+mfc+clr的程序编译通过。我的开发电脑是win11,程序在win10和win11中均能够正常工作,但是在winxp和win7的电脑上测试时缺无法正常工作,错误提示如下:
在这里插入图片描述

经过各种原因查找,发现问题还是在boost::thread库中,thread库(包括std::thread和boost::thread)与clr早期存在兼容性问题。应该是win10和win11已经解决了clr和thread库的兼容性问题,但是winxp和win7下是有问题的。

解决方法如下:(在已完成上篇文章的基础上,确保程序已经能编译通过了)

步骤一:停止使用boost::thread库
所有boost中依赖于boost::thread库的其他库也不要使用。
需要创建线程的地方可以用windows自己的CreateThread函数替代。

步骤二:在工程属性,C/C++,预处理器中的预处理器定义中增加宏定义:
BOOST_THREAD_DYN_LINK
此宏定义表示动态链接boost::thread库,也就是不使用的时候不会链接boost::thread库。

步骤三:编译时使用release模式
注意,一定要用release模式,debug模式我这一直存在问题解决不了。
所以上面涉及到工程属性的修改在release模式下都需要修改。

步骤四:打包时加入boost_thread-vc141-mt-x32-1_77.dll文件
虽然程序没有使用thread库,但是程序提示还是需要此库,打包时需要一同打包。(如果程序运行时提示还缺少其他boost库,则一同打包即可)

步骤五:目前运行电脑安装Visual C++ Redistributable for Visual Studio 2017
因为我们的程序使用共享dll方式编译,所以需要在目标电脑中安装相应的mfc运行库。

经过两篇文章十多个步骤,程序终于能在各种windows系统上都能正常运行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值