Michael's Space

Technology changes the world, serves the people.
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

在MFC中使用OCX控件遇到的一个问题

Posted on 2006-04-14 16:13 奔跑的阿甘 阅读(4305) 评论(2)  编辑 收藏 引用 所属分类: SDK/MFC
在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的高版本没有保持向下兼容?是否接口有变?

Feedback

# re: 在MFC中使用OCX控件遇到的一个问题  回复  更多评论   

2011-03-03 14:59 by liquanhai
非常感谢,帮我解决了个大问题

# re: 在MFC中使用OCX控件遇到的一个问题  回复  更多评论   

2011-03-15 17:57 by 感谢你的人
谢谢了!

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理