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中根本不起作用)。

Invoking Delphi dll from C#

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)));