单进程IE下运行OCX崩溃

ryanbanks 2015-05-30 08:31:17
单进程IE,打开多个tab页,都调用my.ocx。会崩溃。
当打开的只有一个tab页时,运行正常。
当打开第二个tab页调用my.ocx时。就会崩溃。

如果多进程,每个tab一个进程,则不会崩溃。

ocx是文档视图结构。
崩溃是在myctrl中的oncreate()里面崩溃。
下面是oncreate里面的部分函数。

if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;

OnActivateInPlace(TRUE, NULL);//by mjh
AfxEnableControlContainer();

pDocTemplate = new CSingleDocTemplate(
IDR_MainTools,
RUNTIME_CLASS(CKCXZTDoc),
RUNTIME_CLASS(CMyPanel), // 主 SDI 框架窗口
RUNTIME_CLASS(CKCXZTView));

CDocument *pDoc = pDocTemplate->CreateNewDocument();
m_pFrame = pDocTemplate->CreateNewFrame(pDoc,NULL);

运行到m_pFrame = pDocTemplate->CreateNewFrame(pDoc,NULL);就会崩溃。

pDoc 和pDocTemplate都不是NULL。

...全文
272 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryanbanks 2015-06-01
  • 打赏
  • 举报
回复
解决了。问题在于CMyPanel类的oncreate里。 新建了三个什么都没有的doc、frame、view类,替换进去,程序不崩溃。 依次替换,发现在panel类的时候崩溃。 换个想法也很容易想通,pDocTemplate->CreateNewFrame(pDoc,NULL);这句崩溃。windowsAPI几乎是不会出错,两个指针也是正常的,而这句函数的作用是新建一个frame并返回frame指针,那也就是说,可能出错的就是new CSingleDocTemplate时加进去的那个frame类了。
oyljerry 2015-06-01
  • 打赏
  • 举报
回复
感谢分享解决的方法
赵4老师 2015-06-01
  • 打赏
  • 举报
回复
帮结帖。

3,245

社区成员

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

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