您的位置:首页 > 编程语言 > Delphi

Delphi的dll如何向C#传出string(1)

2012-02-22 14:17 274 查看
如果从dll传出string,一般定义成PChar,由调用者分配好内存,并告诉大小,这样比较麻烦。

既然delphi的dll可以传回variant(实际是array),就把字串转成byte array直接传回吧,如:

Delphi XE代码:

function Call(AEndPointURL:PWideChar;AServiceName,AMethodName:PWideChar;
  const AParams:OLEVariant;out AResult:OLEVariant;out AErrorMsg:OLEVariant):HResult;
begin
  try
    ....
  except
    on E:Exception do
    begin
      Result:=1000;
      AErrorMsg:=WideBytesOf(E.Message);
    end;
  end;
end;

C#代码:

public static class inetdll
{
  [DllImport("tmtsSoapStub.dll", 
    EntryPoint = "Call", 
    CharSet = CharSet.Auto, 
    CallingConvention = CallingConvention.StdCall)]
  public static extern int Call(
    [MarshalAs(UnmanagedType.LPWStr)]string AEndPointURL,
    [MarshalAs(UnmanagedType.LPWStr)] string AServiceName, 
    [MarshalAs(UnmanagedType.LPWStr)] string AMethodName,
    ref object AParams, out object AResult, out object AErrorMsg);
}
private void button4_Click(object sender, EventArgs e)
{
  object vErrorMsg;
  object r;
  object vParams=null;
  int hResult = inetdll.Call(
    "http://127.0.0.1:8080/Broker.dll/soap/ISoapService",
    "Test", "Test", 
    ref vParams, out r, out vErrorMsg);
  if (hResult!=0)
    MessageBox.Show(ASCIIEncoding.Unicode.GetString((byte[])vErrorMsg));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: