美好的一天!
我有奇怪的问题。 在Delphi方面,我们有: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替换为0(零,0d和0.0),我将得到SEHException(0x80004005)。
有什么想法吗?
UPD。
Delphi 2007(无法改变,太多不能重建^ _ ^)
VS 2013(.NET 4.5.1)
操作系统:Windows 8.1
平台目标x86(在x64中根本不起作用)。
答案 0 :(得分:0)
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类型。我在这里没有证明这一点。已经有很多例子可供使用。
答案 1 :(得分:-1)
试
Console.WriteLine(Func("this is my function", Convert.ToDouble(0.0)));