静态编译MFC的 ActiveX控件让IE出错关闭,请高手指点迷津!

ddrrpp 2006-01-11 03:48:43
我的一个ActiveX控件,其中既使用了C,又使用了MFC的多线程,用use MFC in a shared DLL编译生成ocx,IE中使用是OK的,改用use MFC in a static Library,编译生成ocx,ocx被IE调用并运行后,IE报错并且关闭,请问是个什么原因?现在完全没有思路,请大家给个方向。^_^
...全文
238 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
北漂17载 2006-02-06
  • 打赏
  • 举报
回复
release 下的呢? release下带调试信息的呢?
DentistryDoctor 2006-01-17
  • 打赏
  • 举报
回复
1.多线程环境下使用CSocket一定得注意。另外在DLL(ActieX)中用到了MFC,最好用Share MFC dll.
DiamondJack 2006-01-17
  • 打赏
  • 举报
回复
另外开贴加了100分,请大家帮忙想想办法

http://community.csdn.net/Expert/topic/4520/4520906.xml?temp=.1618006 加分贴
DiamondJack 2006-01-17
  • 打赏
  • 举报
回复
今天对这个问题进一步的进行了调试现象如下:
1、在Debug版本的shared Library 可以成功运行并没有任何问题
2、在Debug版本的Static Library 状态下不能成功运行,跟进去发现报的是“0xC0000005 access violation”错误。具体代码行是(*pSocket)->Create();但(*pSocket)比较两种情况下pSocket指针的内容是一样的,都是正常的指针。


考虑到只是对MFC类库的引用方式不同,所以应该不是数组越界等错误。在微软主页上查询到“Windows XP SP2 中的数据执行保护功能的详细说明”中提到XP的sp2补丁对数据执行保护 (DEP)可能会造成这种错误,关闭DEP重启机器,问题依旧。

不知道那位大哥对这个问题有研究,帮忙看看。谢谢~~~~
DiamondJack 2006-01-17
  • 打赏
  • 举报
回复
感谢楼上各位的回答。

To laiyiling(【CSDN●NONAME】)。
你的意思是socket用到多线程后在静态编译的时候的情况吗?

我这里虽然是用到多线程,但准确的来说是两个线程,socket部分用一个线程,还有一个线程是做其他的事情。和socket无关。
Kudeet 2006-01-17
  • 打赏
  • 举报
回复
如果是多线程,需要在每个线程加上socket初始化代码 AfxSocketInit。要在新的线程里再初始化,只是Debug的时候就不用。
Kudeet 2006-01-17
  • 打赏
  • 举报
回复
http://support.microsoft.com/KB/193101
DiamondJack 2006-01-13
  • 打赏
  • 举报
回复
UP 同样的问题关注
  • 打赏
  • 举报
回复
检查你的代码有没有越界,这是最大的可能性
caesun 2006-01-12
  • 打赏
  • 举报
回复
debug看看咯
zminhao 2006-01-12
  • 打赏
  • 举报
回复
呵呵,不太清楚,帮你顶。
我现在也在做一个activeX,在debug模式下都OK,编译成release模式就会出错,也是一头雾水
ddrrpp 2006-01-12
  • 打赏
  • 举报
回复
编译选项是这样的:

use MFC in a shared dll
/MD
编译生成 ocx, IE 运行normal

/MT /MTd编译不过

----
use MFC in a static lib
/MT
编译生成ocx, IE 调用出错关闭

/MD /MDd 编译不过

can anybody give some suggestion ? ^_^

3,245

社区成员

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

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