碰到一个比较奇怪的问题,折腾了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
);
但为什么是这样,找不到原因。
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
);
但为什么是这样,找不到原因。
-》这种问题的原因很多,最不容易解决。 一些电脑可以,一些电脑不可以,只能猜测是安装环境,库的问题了。
都查看了,都是64位系统,WIN7旗舰版,而且我自己采用64位DLL 和 32位DLL 都试过了,结果还是一样!!!!
解决方法:宿主必须要有对应的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你检查下正常运行的机器和不能运行的机器有什么环境差异。