碰到一个比较奇怪的问题,折腾了2天了,一直找不到原因。
c# winform 调用 vc写的dll,采用DllImport 方式,在有些WIN7 64位系统中总是报错 无法加载指定的模块,但是在另外一些电脑中又可以使用。
1、首先怀疑是调用的动态库有问题,最开始是使用第三方的。后经过测试,自己采用VC++写的DLL,在这些电脑上也无法使用。
2、但是能够引用的DLL ,不采用DLLImport方式调用的又可以使用。
3、但是采用标准库中的,DLLImport方式引用的是可以使用的。如[DllImport("kernel32")]
            private static extern int GetPrivateProfileInt(
                                   string lpAppName,
                                   string lpKeyName,
                                   int nDefault,
                                   string lpFileName
                                   );
但为什么是这样,找不到原因。

解决方案 »

  1.   

    C++的DLL库有环境依赖,比如依赖项不完整。
      

  2.   

    在有些WIN7 64位系统中总是报错 无法加载指定的模块,但是在另外一些电脑中又可以使用
    -》这种问题的原因很多,最不容易解决。 一些电脑可以,一些电脑不可以,只能猜测是安装环境,库的问题了。
      

  3.   


    都查看了,都是64位系统,WIN7旗舰版,而且我自己采用64位DLL 和 32位DLL 都试过了,结果还是一样!!!!
      

  4.   

    之前也遇到过这样的问题:“无法加载指定模块XXX",
    解决方法:宿主必须要有对应的VC++ Runtime 环境一般都会有说明,如:Flavor                      Version      Downloads             Comments
    --------------------------+-------------+--------------------------+------------------------------------------------------------------------------------------------
    Windows (MSVC)     0.12.4         32-bit / 64-bit             for Windows Vista/2008 or later; bundles VC++ Runtime 2015你检查下正常运行的机器和不能运行的机器有什么环境差异。