在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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("\0",""); // 去掉尾部的0字符 married = BitConverter.ToBoolean(data, 24); salary = BitConverter.ToDouble(data, 25); } else { id = 0; name = String.Empty; married = false; salary = 0; } } public override string ToString() { return String.Format("id: {0}, name: {1}, married: {2}, salary: {3}", id, name, married, salary); } } private static void Main(string[] args) { Console.WriteLine(Marshal.PtrToStringAuto(getResStr(0))); byte[] data = new byte[33]; Marshal.Copy(getMydata(), data, 0, 33);
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论