我用C# 2017版本 调用一个第三方的dll(老delphi开发),如果在环境中设置目标框架为 .net framework 4 则一切正常,但如果设置目标框架为4.5或者4.7,则直接崩溃,停止工作。
引用方式为: [DllImport("a.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
//[return: MarshalAs(UnmanagedType.LPStr)]
public static extern string f_b(); //无参数 返回PChar
请问是什么原因 要怎么调整?配置管理器为x86.
引用方式为: [DllImport("a.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
//[return: MarshalAs(UnmanagedType.LPStr)]
public static extern string f_b(); //无参数 返回PChar
请问是什么原因 要怎么调整?配置管理器为x86.
先谢谢。
查dll的依赖关联吗?
所有代码、环境不变,只切换一下目标框架,就一个正常运行,一个崩溃(直接提示停止工作),我也要奔溃了。。
变通的方法是 用 4 创建一个类库引入第三方的dll,并转换为 C# 方法
在 4.5 项目中引用上面创建的dll。总不能说 .net framework 自己的dll 也不能引用吧?
我用4下引入第三方dll 生成一个新的dll
但是在调用新的dll时,现象是一样的,目标框架为 .net framework 4 则一切正常,但如果设置目标框架为4.5或者4.7,则直接崩溃
引用dll中特定版本属性 True和False都试过
是这个意思吗?
我没那么多环境,无法测试
对,我用4生成一个dll 只能在4下调用,换成4.5就崩溃不需要很多环境,只需要有2015或者2017就可以,切换一下目标框架就行
如果你有时间帮忙,我可以把原始dll发给你
谢谢
对,但不知道不同的框架对dll有什么区别,有没有可能改调用方式或者参数类型可以解决的?
一般这类的组件 和 .net版本没有关联;下载一个dependency,查找一下依赖关联: http://www.dependencywalker.com/
另外给你说一下X86,X64与AnyCPU的差异
X86只能运行在32的CLR 上面
X64只能运行在64位CLR 上面
AnyCPU既可以运行在32位上面也可以运行在64位上面,但不是说使用AnyCPU就不会有问题
如果你的电脑是64位则AnyCPU会运行在64位CLR上面,如果这个时候你使用的三方dll有32的,则会出现调用失败的现象
相对的如果你的电脑是32则AnyCPU会运行在32位的CLR上面