一个atl工程实现了一个com组件,debug版本可以正常编译连接注册dll
可是选择release版本会失败
链接的时候有一个警告信息如下:
1>LINK : warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
注册的时候会弹出失败对话框
失败信息大致如下:
Debug Assertion Failed!
Expression: string iterator not dereferencable
如果release版本的运行时库从“多线程DLL(/MD)”改为“多线程调试DLL(/MDd)”则可以编译注册成功。
但是在未安装vc的电脑上无法注册该dll,求解。。

解决方案 »

  1.   

    要安装VC运行时库的。你的程序使用了VC的运行时库,其它电脑上没有合适版本的运行时库,所以注册不了。上网下载相应版本的运行时库安装后,就OK了。
      

  2.   

    release版为什么要用/MDd?
    先查查这个
      

  3.   

    Release版本应该是/MD,你可以看看编译出来的dll,命令行RegSvr32是否能注册成功
      

  4.   

    恩,关键是release用/MD会出错,手动regsvr32也会出错。改为/MDd才正常。具体代码涉及到哪一部分引起的原因很难找到
      

  5.   

    使用/MD编译链接都正常,就是注册DLL时出现如下对话框
      

  6.   

    用 depends 看看这个com依赖的文件是否缺失,
      

  7.   

    问题已解决,感谢各位的关注。
    由于该工程用到了google protocol buffers库
    最初用的是google protocol buffers生成的Debug版lib文件
    所以造成了该工程Release版本不能注册。
    重新生成google protocol buffers的Release版lib文件即解决了问题。
      

  8.   

    Release版本应该是/MD,你可以看看编译出来的dll,命令行RegSvr32是否能注册成功