本帖最后由 skyxie 于 2009-12-03 23:19:14 编辑

解决方案 »

  1.   

    mfc/atl都没有使用?
    没做过这样的控件。
      

  2.   

    上面以及贴出来了~
    有问题和没有问题之间的区别就是一个W2A,A2W;以及使用了std::string
    ps, tttyd是啥意思啊?我想到一个,但是太...太...太淫荡,不好意思说出来 ^_^
      

  3.   

    std::string enc_string; 

            USES_CONVERSION;            
            enc_string = W2A(wstrEnc);  
    } 与你遇到的问题无关的是,如果在循环中用转换宏,会出问题的。其分配的内存,只会在函数结尾才会被释放,循环中反复使用,堆栈可能存在溢出
      

  4.   

    上面已经贴出来了~ 
    几个W2A,A2W;以及使用了std::string 
      

  5.   


    没有在循环中使用;而且就是是这样的,也应该是程序执行到这里的时候才会出这个问题嘛现在的问题是加上这个之后,regsvr32 xxx.ocx, 连dllmain, dllregisterserver都进入不了...
      

  6.   

    std::string enc_string; 

            USES_CONVERSION;            
            enc_string = W2A(wstrEnc);  

    在这个大括号内,W2A申请的内存是在栈上,括号结尾处,申请的内存已经被释放。enc_string实际返回的是已经释放过的内存地址。所以这是有问题的。
      

  7.   


    不是函数的结尾,而是作用域的结尾。我在
    USES_CONVERSION;           
    enc_string = W2A(wstrEnc); 
    的前后加上{},就是为了让作用域尽量的小,在执行完这个赋值动作之后就释放。
      

  8.   


    在{}括号中赋值的时候就调用了 std::string的copy ctor,赋值之后释放与否,对 enc_string  来说已经不重用了
      

  9.   

    tyd我的名字拼音头一个字母 前面加两t避免重复
      

  10.   

    你在DllMain之前的启动函数_DllMainCRTStartup函数处设置断点,查看一下模块初始化情况。
    看能否扑捉到异常信息。
    _DllMainCRTStartup函数在crtdll.c文件中。
      

  11.   


    _CRT_INIT
    _DllMainCRTStartup 都没有进去,难道是 #include <AtlConv.h>  之后,它就用Atl 而不是 crt的 entry point了?
    明天去公司再研究看看
      

  12.   

    有没有定义全局对象?连接时有无警告?
    看起来是VC的bug,如果你用的是VC版本比较旧,建议换高版本的VC试试。
      

  13.   

    link的时候没有任何warning
    已经是用的vs2008 sp1了
      

  14.   


    汗~ 果然是全局对象的原因!
    在某个文件中定义了一个 static const std::string 的全局对象,将其改为非全局的就OK了。
      

  15.   

    连_DllMainCRTStartup函数都进不了,只能哪个是静态或全局变量初始化的问题了.
    gx lz问题解决