[高手来看]ActiveX控件封装Doc/View,IE连续打开多个ocx之后崩溃

三条猫 2012-06-07 11:03:45
发现是CWinApp theApp在前几次都会调用构造函数,而后面就不调用了,也不调用InitInstance(),

导致 AfxGetThread();得到的结果为NULL,后面创建文档窗口时指针为空,崩溃.

IE6下没问题,IE8/IE9打开前3个不会出错,第4个就会,360浏览器第2次调用就会遇到这个问题,求高手解答.
...全文
375 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
三条猫 2012-06-12
  • 打赏
  • 举报
回复
用了些其他办法把这个问题绕过了,谢谢楼上的兄弟热心回复,结贴
三条猫 2012-06-11
  • 打赏
  • 举报
回复
顶一下,看看高手指点
三条猫 2012-06-08
  • 打赏
  • 举报
回复
资源肯定有...对话框/工具栏/菜单这些...

ocx不能带资源是哪写的?怎么解决?
anmychen2001 2012-06-08
  • 打赏
  • 举报
回复
OCX中除了自身是不能带资源的别忘了。你是不是DLL里有资源?
三条猫 2012-06-08
  • 打赏
  • 举报
回复
在xp上编译出来的结果也一样,主要是在ocx中用到了doc/view,纠结啊...
三条猫 2012-06-07
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20070330/11/9713578b-4caf-42d3-b8a2-3ec66a6fc6e3.html

以前也有人遇到这个问题,但没有解决方案,纠结了
anmychen2001 2012-06-07
  • 打赏
  • 举报
回复
编译环境很重要,32编的在32上跑,64编的在64上跑,不然会有问题。
三条猫 2012-06-07
  • 打赏
  • 举报
回复
这个ocx也是一个3d显示的控件,用的hoops引擎,操作系统是win7 64位,用的32位的浏览器,因为客户大部分用的xp系统,都是32位浏览器,用的vs2008编译,不知道编译环境和操作系统,IE之间有什么关系?

想问问熟悉这方面的朋友,有什么解决办法或者思路?
anmychen2001 2012-06-07
  • 打赏
  • 举报
回复
建议你可以在PPT里试下
anmychen2001 2012-06-07
  • 打赏
  • 举报
回复
这个可能和你的浏览器有关了,我这里开NNN个IE都没出错,还是带D3D的OCX,只要内存够足应该可以无限开下去
三条猫 2012-06-07
  • 打赏
  • 举报
回复
多个IE是用分页栏方式加载的,前3个分页栏都正常,

第4个分页栏就无法调用CWinApp theApp;的构造函数

MFC的入口都没调用,后面就开始崩溃

用一个空的OCX控件测试都是这样的情况,不懂是什么机制造成的?
三条猫 2012-06-07
  • 打赏
  • 举报
回复
双击html文件,多个IE打开同一个ocx
三条猫 2012-06-07
  • 打赏
  • 举报
回复
一个IE用同一个OCX打开多个实例,

<object id="Ev3DViewerControl" width="1024" height="600" classid="CLSID:6E1FC2C3-8312-409F-BC94-D0B02D7207C0">

对的,是这种代码
csucdl 2012-06-07
  • 打赏
  • 举报
回复
360浏览器对OCX支持的不好
anmychen2001 2012-06-07
  • 打赏
  • 举报
回复
用的是类似:
<object classid="CLSID:0BD1B890-F928-43BA-9CC1-3E2FF16C4B93" id="ArLaunchInter1"
width="1024px" height="768px">
</object>
的代码吗?
anmychen2001 2012-06-07
  • 打赏
  • 举报
回复
是在一个IE里打开多个实例还是在多个IE里打开一个实例?
三条猫 2012-06-07
  • 打赏
  • 举报
回复
各位说的我都注意到的

新建了一个什么都没有的ocx,然后在ie9里面打开多个实例,也是这个样子.

开3个实例正常,第4个就不调用theApp的构造函数和InitInstance了,
CWinApp没有正确的初始化,MFC后续无法正确执行.

所以想问问有哪位对com特别熟的,分析一下引起这种情况的原因是什么?

怎么解决...
anmychen2001 2012-06-07
  • 打赏
  • 举报
回复
尽量不要在OCX的App中InitInstance里做事,把代码搬到Ctrl的OnCreate里去做。
anmychen2001 2012-06-07
  • 打赏
  • 举报
回复
你在OCX的OnCreate(LPCREATESTRUCT lpCreateStruct)里做什么了?
ArcRain 2012-06-07
  • 打赏
  • 举报
回复
开一个关一个,看看能调用到正确的构造和析构不。
也可以尝试注释掉些代码,仅保留最基本的代码,试试会不会有问题。。。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧