我的一个ActiveX控件,其中既使用了C,又使用了MFC的多线程,用use MFC in a shared DLL编译生成ocx,IE中使用是OK的,改用use MFC in a static Library,编译生成ocx,ocx被IE调用并运行后,IE报错并且关闭,请问是个什么原因?现在完全没有思路,请大家给个方向。^_^

解决方案 »

  1.   

    编译选项是这样的: 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 ? ^_^
      

  2.   

    呵呵,不太清楚,帮你顶。
    我现在也在做一个activeX,在debug模式下都OK,编译成release模式就会出错,也是一头雾水
      

  3.   

    今天对这个问题进一步的进行了调试现象如下:
    1、在Debug版本的shared Library 可以成功运行并没有任何问题
    2、在Debug版本的Static Library 状态下不能成功运行,跟进去发现报的是“0xC0000005 access violation”错误。具体代码行是(*pSocket)->Create();但(*pSocket)比较两种情况下pSocket指针的内容是一样的,都是正常的指针。
    考虑到只是对MFC类库的引用方式不同,所以应该不是数组越界等错误。在微软主页上查询到“Windows XP SP2 中的数据执行保护功能的详细说明”中提到XP的sp2补丁对数据执行保护 (DEP)可能会造成这种错误,关闭DEP重启机器,问题依旧。不知道那位大哥对这个问题有研究,帮忙看看。谢谢~~~~
      

  4.   

    另外开贴加了100分,请大家帮忙想想办法http://community.csdn.net/Expert/topic/4520/4520906.xml?temp=.1618006  加分贴
      

  5.   

    1.多线程环境下使用CSocket一定得注意。另外在DLL(ActieX)中用到了MFC,最好用Share MFC dll.
      

  6.   

    http://support.microsoft.com/KB/193101
      

  7.   

    如果是多线程,需要在每个线程加上socket初始化代码 AfxSocketInit。要在新的线程里再初始化,只是Debug的时候就不用。
      

  8.   

    感谢楼上各位的回答。To  laiyiling(【CSDN●NONAME】)。
    你的意思是socket用到多线程后在静态编译的时候的情况吗?我这里虽然是用到多线程,但准确的来说是两个线程,socket部分用一个线程,还有一个线程是做其他的事情。和socket无关。
      

  9.   

    release 下的呢? release下带调试信息的呢?