C# Delphi的Net运行库

C# Delphi的Net运行库,c#,delphi,C#,Delphi,我在项目中成功地使用了.Net Delphi运行时库并加载了程序集(C#)。我只有在尝试从程序集获取字符串结果时才遇到问题。 我的C#代码是: 我的Delphi代码是: _SISign = dispinterface ['{AAFE8566-37E1-485B-9727-7223F7731F19}'] function Add(a, b : Integer) : Integer; dispid 0; function GetProtectedID(InString: String): S

我在项目中成功地使用了.Net Delphi运行时库并加载了程序集(C#)。我只有在尝试从程序集获取字符串结果时才遇到问题。 我的C#代码是:

我的Delphi代码是:

_SISign = dispinterface
['{AAFE8566-37E1-485B-9727-7223F7731F19}']
  function Add(a, b : Integer) : Integer; dispid 0;
  function GetProtectedID(InString: String): String; dispid 1;
  end;

var
  oSISign : _SISign;
begin
  WriteLn(oSISign.Add(10, 20));
  WriteLn(oSISign.GetProtectedID('SomeText'));
end;

第一行返回30,第二行什么也没有。

我现在找到了一些解决方案

在C#change中

在德尔菲,我改为

_SIXmlSign = dispinterface
    ['{4a674fd3-244f-4802-9b1d-9eb0b0efb282}']
  function GetProtectedID(InString: String; var OutString: String): Integer; dispid 1;
end;

现在代码工作

您确定加载了正确版本的程序集吗?Delphi字符串和C#字符串类型不兼容。如果要编写COM兼容的DLL(可在Delphi、VB等中使用),则需要使用诸如BSTR之类的COM字符串类型。您需要在Delphi端使用
WideString
。但仅仅使用Robert Giesecke的UnmanagedExports可能更简单。问题4294967295询问为什么不使用Delphi字符串进行互操作?。为什么人们不能先在这里搜索关于Delphi C#string的问题,然后找到以前的文章中的一篇?Delphi函数原型看起来是错误的。你能查一下吗?如果逗号实际上是分号,那么您将OutString声明为变量类型,并且在任何情况下都不会测试InsString。Yes@Dsm。现在已更改。抱歉,这仍然不正确。它不编译。这里不能有逗号,这不对。不能将delphi本机字符串用于互操作。
public integer GetProtectedID(string InString, out string OutString)
{
  OutString = "Result HERE";
  return 0;
}
_SIXmlSign = dispinterface
    ['{4a674fd3-244f-4802-9b1d-9eb0b0efb282}']
  function GetProtectedID(InString: String; var OutString: String): Integer; dispid 1;
end;