Invoking Delphi dll from C#
本文关键字:from dll Delphi Invoking | 更新日期: 2023-09-27 18:28:42
您好!
我有个奇怪的问题。在德尔福方面,我们有:
Function Func(str: String; res: double) : double; export; stdcall;
Begin
Result := res;
End;
在C#端:
[DllImport("Project1.dll")]
static extern double Func(string str, double res);
没关系,如果我这样写的话:
Console.WriteLine(Func("this is my function", 0.1));
结果将为0.1。
但是,如果我将0.1替换为0(0、0d和0.0),我将得到SEHException(0x80004005)。
有什么想法吗?
UPD。
Delphi 2007(没有办法改变,太多无法重建^_^)
与2013年相比(.NET 4.5.1)
操作系统:Windows 8.1
平台目标x86(在x64中根本不起作用)。
Function Func(str: String; res: double): double; stdcall;
这个函数只能从Delphi调用,因为它使用了原生的Delphi字符串类型。实际上,您只能从具有二进制兼容字符串类型的Delphi版本中调用它。
如果希望与C#进行互操作,则需要更改签名以使用对互操作有效的类型。例如:
Function Func(str: PAnsiChar; res: double): double; stdcall;
在C#方面,这是:
[DllImport(dllname, CharSet = CharSet.Ansi)]
static extern double Func(string str, double res);
作为使用以null结尾的字符数组的替代方法,如果愿意,可以使用COM BSTR类型。我不会在这里演示。已经有很多例子。
尝试
Console.WriteLine(Func("this is my function", Convert.ToDouble(0.0)));