C# 调用Delphi dll
delphi dll 源码:
library dllres; type char10 = array[0..9] of char; TMydata = packed record id: Integer; name: char10; married: Boolean; salary: Double; end; PMydata = ^TMydata; const RESSTR: array[0..4] of string = ('HELLO', 'COLOR', 'DELPHI', 'shared', 'library'); NO_RESULT= 'no result'; var mydata: TMydata; {$R *.res} // 返回字符串指针 function getResStr(aindex: Integer): PChar; stdcall; begin if aindex < Length(RESSTR) then begin Result := pchar(RESSTR[aindex]); end else begin Result := pchar(NO_RESULT); end; end; // 返回结构体指针 function getMydata: PMydata; stdcall; begin with mydata do begin id := 123; name := 'obama'; married := false; salary := 1200; end; Result := @mydata; end; exports getResStr, getMydata; begin end.
C# 调用示例:
class Invoke_Delphi_Dll_Exam { [DllImport("dllres.dll", CallingConvention = CallingConvention.StdCall)] public static extern IntPtr getResStr(int index); [DllImport("dllres.dll", CallingConvention = CallingConvention.StdCall)] public static extern IntPtr getMydata(); public struct Mydata { public int id; //0 public string name; //4 public bool married; //24 public double salary; //25 public Mydata(byte[] data) { if (data != null && data.Length == 33) { id = BitConverter.ToInt32(data, 0); name = Encoding.Unicode.GetString(data, 4, 20).Replace("