尝试了很多例子并没有成功 我在Delphi中编写了一个DLL,它导出一个返回一个Array的函数,然后导入到C#应用程序中。 A成功使用一个变量:
的Delphi
function GetArrayData(var testArray : integer): WordBool; stdcall; export;
begin
testArray := 1;
Result := True;
end;
C#
[DllImport("some.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
static extern bool GetArrayData([Out] out IntPtr IntegerArrayReceiver);
private void GetButton_Click(object sender, EventArgs e)
{
unsafe
{
IntPtr IntegerArrayReceiver = IntPtr.Zero;
GetArrayData(out IntegerArrayReceiver);
textBoxData.Text = IntegerArrayReceiver.ToString();
}
请有人可以转换此代码以使用数组。意味着从Delphi导出数组并导入到C#数组。我有Delphi和C#代码的源代码。
答案 0 :(得分:4)
在Delphi方面,你可以这样写:
function GetArrayData(arr: PInteger; len: Integer): LongBool; stdcall;
var
i: Integer;
P: PInteger;
begin
P := arr;
for i := 0 to len-1 do
begin
P^ := i;
inc(P);
end;
Result := True;
end;
这里我们收到一个指向第一个元素的指针,以及数组的长度。
在C#方面你会写:
[DllImport("some.dll")]
static extern bool GetArrayData(int[] arr, int len);
....
int[] arr = new int[42];
if (GetArrayData(arr, arr.Length))
....
调用C#代码分配数组并将指向第一个元素的指针传递给Delphi代码。