CWebBrowser2 create失败Debug版

在MFC中使用OCX控件遇到的一个问题
[问题:]
在一个简单的MFC对话框中嵌入一个OCX控件(如浏览器控件),该控件采用动态方式创建,即调用CWnd::Create()接口生成窗口,在本机运行良好,但是在其它部分机器上运行则出现程序异常,报告occsite.cpp的第161行出现错误。当把源程序放到目标机器上重新编译后程序可以正常运行。以下是示例代码:
m_pFlashPlayer = NULL;  // 一个FLASH控件的对象指针
CRect rt;
GetClientRect(&rt);  //获得区域大小
if (m_pFlashPlayer = new CShockwaveFlash) {  // CShockwaveFlash由FLASH控件添加到PROJECT后 VC自动生成
 if (m_pFlashPlayer->Create("PP", WS_VISIBLE , rt, this, 0)) {  //创建窗口
  m_pFlashPlayer->SetMovie(str);
  m_pFlashPlayer->Play();
 }
}
这个问题带来的后果是如果要发布该程序到100台机器上,则必须要在100台机器上重新编译一遍程序才能正确执行。
[分析:]
经过测试,发现:
1)该问题只存在于程序DEBUG版本中,在RELEASE版本中不存在该问题。
2)该问题和MFC有关,和所嵌入的控件本身没有任何关系。
经过深入分析,发现:该问题是由于 开发机和目标机使用的MFCO42D.DLL库不匹配引起的
[结果:]
经过确认,发现开发机和目标机的运行环境有如下差异:开发机未安装任何VS补丁,MFCO42D库的File Version为6.0.8168.0, Product Version为 6.0.000,而目标机安装了VS6.0 SP5,MFCO42D库的File Version为 6.0.8665.0, Product Version为 6.0.400。
[解决:]
为确保各编码及维护人员使用的MFCO42D.DLL一致,对MFCO42D.LIB和MFCO42D.DLL进行了统一(把.lib和.dll拷贝到程序的当前路径);同时将开发机上的MFCO42D.DLL和执行程序一起发布。
[疑问:]
为何MFCO42D的高版本没有保持向下兼容?是否接口有变?
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值