gpt4 book ai didi

c# - Delphi Dll 到 C#

转载 作者:太空宇宙 更新时间:2023-11-03 21:35:04 25 4
gpt4 key购买 nike

试了很多例子都没有成功我有一个用 Delphi 编写的 DLL,它导出一个返回数组的函数,然后导入到 C# 应用程序中。 A 成功地使用了一个变量:

德尔福

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# 代码的源代码。

最佳答案

在 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 代码。

关于c# - Delphi Dll 到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22209915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com