[问题:]
在一个简单的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的高版本没有保持向下兼容?是否接口有变?

在MFC中使用OCX控件遇到的一个问题相关推荐

  1. MFC中开发ocx控件,html容器收不到ocx的事件Event

    问题背景: MFC开发ocx控件,主窗口就是ctrl类,主窗口类中调度接口和事件映射添加,执行OK,外部html容器中接收事件成功,如下: ctrl.h中声明事件映射函数 void EVTPENSIG ...

  2. MFC中动态创建控件以及事件响应实现方法

    本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...

  3. MFC中动态创建控件以及添加事件响应

    本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...

  4. C#中调用OCX控件

    调用OCX控件的步骤: 1.在系统中注册该ocx控件,命令:regsvr32.exe 控件位置(加 /u 参数是取消注册) 2.在.net的工具箱中添加该控件,拖到form中去就可以了. 不用工具箱的 ...

  5. MFC中的edit控件

    edit control 编辑框 static control 静态文本框控件 Button 按钮控件 第一步,在VS2019中新建一个MFC项目: 第二步,打开资源视图,双击打开窗口,在工具栏中选择 ...

  6. VS2010下ocx开发:(2)在C#程序中调用ocx控件

    在本文中,给出一个C#示例程序,调用上一篇博文中创建的MultiplyDemo.ocx控件.注意需要保证该控件已经注册过. 启动Visual Studio 2010,使用C#创建一个Windows窗体 ...

  7. 怎样在Delphi2007中安装OCX控件

    一.安装新的控件 1)首先,单击File▶New▶Package 创建一个控件包,然后保存这个工程(注意这一步很关键): 2)单击Component▶Import Component: 3)在弹出窗体 ...

  8. MFC中动态创建控件及添加消息响应的方法实例

    动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框, ...

  9. VC/MFC中的CComboBox控件使用详解

    CComboBox控件详解 CComboBox控件又称作组合框控件,其有三种形态可供选择,1.简单组合框(Simple)2.下拉组合框(Drop-down)3.下拉列表式组合框(Drop-down l ...

最新文章

  1. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...
  2. 我的人生项目 -- 启动
  3. python编程前面需要一个空格怎么做_初学python,不明白代码之间时空格的用处
  4. 杀毒软件原理进阶阶段
  5. Boost:双图bimap与range范围的测试程序
  6. php网站不能访问,php怎么不登录不能访问
  7. 开源监控Prometheus二进制安装
  8. android 照片旋转并保存
  9. X协议 mysql_MySQL X协议分析
  10. 获取input添加图片的路径以及fakepath的解决方法
  11. 人脸识别系统的活体检测技术
  12. DDR MC DFI PHY
  13. Mr. Kitayuta vs. Bamboos
  14. 异地购房提取北京公积金说查不到贷款信息是怎么回事
  15. ISCC 2021 WP
  16. 基于C#的快递物流管理系统#毕业设计
  17. 【Linux】VIM使用
  18. 浏览器保存下载不带后缀的图片文件名命名规则
  19. helm create configmap error: ConfigMap in version “v1“ cannot be handled as a ConfigMap
  20. css背景图片的运用

热门文章

  1. 三翼鸟:羽翼渐丰,腾飞指日可待
  2. es6 数组找最大值_在对象数组中查找属性的最大值
  3. Docker守护式容器的创建和登录
  4. Qt调色板:QPalette说明和示例
  5. 计算机无法启动命令,你的电脑未正确启动怎么用命令提示符修复
  6. 我的计算机无法启动不了,电脑版我的世界为什么无法启动不了怎么办
  7. 怎么将照片变成漫画?照片一键变漫画方法分享
  8. Android手势密码view笔记(一)
  9. 法规标准-ISO 17361标准解读
  10. STATS 782 - Numerical Computation