zoukankan      html  css  js  c++  java
  • C#平台互操作部署问题

    程序中使用了平台互操作p/invoke在C#中调用MFC的DLL,在安装有VS2008开发环境的系统中程序均可正常运行,但是复制到其它机器上就不行了,.NET FRAMEWARK也都是最新版本,不知道怎么办。

    A.dll 是别人用VC6.0开发的,里面导出了一个类,没有源码。
    B.dll 是对A.dll的一个包装,VC++2008开发,将类的成员函数包装成全局函数,并导出。
    C.dll 是对B.dll的一个包装, C#开发,使用P/Invoke调用B.dll中的函数.
    D.exe 是最终程序,引用了C.dll

    后来用Depends.exe分析,发现最终Debug目录中的B.dll使用了MSVCR90D.dll,奇怪的是这个文件却找不到,在安装了VS的机器上,即使找不到也能运行.

    查了一些资料有说MSVCR100.dll可能有一个BUG, 跟编译模式也有关系, 于是使用RELEASE编译, 问题解决,到处都能运行了.

    继续用Depends.exe分析,发现Release模式下的B.dll使用了MSVCR90.dll, 少了一个D结尾,应该是调试版本和正式版本之分. 此时才想到装了VS的环境里面有很多用于调试的DLL,而这些D结尾的DLL在安装MS的VC++2008可分发包的时候是没有包含的,因此导致了问题.

    所以,一定不要图省事,把DEBUG版本的拿出来给用户用. 我知道很多人有都有这个习惯,坏习惯!!! 如果不早点客服,以后早晚会付出更大的代价来发现由此导致的问题。

  • 相关阅读:
    js中“==”与“===”区别
    java中的除法及求余运算特殊性。
    oracle数据库查询历史某一时刻的表数据
    Java多线程总结(转载)
    I/O之Writer-Reader
    I/O之File
    MYSQL之內链接 左链接 右链接 区别
    ubuntu下编译boost
    linux下编译安装boost库
    搭建无线弱网测试环境
  • 原文地址:https://www.cnblogs.com/swnuwangyun/p/1893259.html
Copyright © 2011-2022 走看看