源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C# 调用Delphi dll 实例代码

  • 时间:2020-08-30 23:15 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C# 调用Delphi dll 实例代码
delphi dll 源码:
[u]复制代码[/u] 代码如下:
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# 调用示例:
[u]复制代码[/u] 代码如下:
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);             Mydata mydata = new Mydata(data);             Console.WriteLine(mydata);         }     }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部