• 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版本的拿出来给用户用. 我知道很多人有都有这个习惯,坏习惯!!! 如果不早点客服,以后早晚会付出更大的代价来发现由此导致的问题。

  • 相关阅读:
    PHP将数组转换为xml
    PHP对象转数组
    MongoDB 基础命令 (MongoDB Shell)
    PHP操作Redis常用技巧
    JavaScript 表达式 Expression
    JavaScript 语句 Statement
    JavaScript 原子常量 Atom
    encodeURI()和encodeURIComponent() 区别
    Unicode 与 JavaScript 详解
    DOCKER 相关的一些用法
  • 原文地址:https://www.cnblogs.com/swnuwangyun/p/1893259.html
Copyright © 2020-2023  润新知