【发布时间】:2012-08-08 23:03:05
【问题描述】:
所以我学会了在这种情况下使用 IntPtr,
-delphi(delphi 2006版)代码
function GetRequestResult(out code:integer):PChar; stdcall;
begin
LogMessage('GetRequestResult');
code:=requestCode;
result:=PChar(RequestResult);
LogMessage('GetRequestResult done');
end;
那么,为了在 c# 中使用, 我曾经喜欢,
IntPtr str = GetRequestResult(out code);
string loginResult = Marshal.PtrToStringAnsi(str);
而且效果很好。
那么,这个案子呢?
-delphi代码
procedure Login(login,password:PChar); stdcall;
...
...
这个 PChar 在 () 里面。 那么将字符串值传递给该 Login delphi 函数的确切方法是什么?
[DllImport ("ServerTool")]
private static extern void Login([MarshalAs(UnmanagedType.LPStr)]string id, [MarshalAs(UnmanagedType.LPStr)]string pass);
private static extern void Login(IntPtr id, IntPtr pass); // 这种情况下,后面的这个IntPtr怎么用?
private static extern void Login(string id, string pass);
提前致谢。
【问题讨论】:
-
什么delphi版本?由于这主要是一个 C# 问题,如果底层 DLL 是 delphi 7 dll,或 XE那么您上面列出的签名将有两种不同的含义。
标签: c# delphi pinvoke delphi-2006