C# 调用Delphi dll 实例代码
C# 调用Delphi dll 实例代码
发布时间:2016-12-28 来源:查字典编辑
摘要:delphidll源码:复制代码代码如下:librarydllres;typechar10=array[0..9]ofchar;TMydat...

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字符

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);

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类