繁体   English   中英

Delphi Dll至C#

[英]Delphi Dll to C#

尝试了很多示例,但没有成功,我在Delphi中编写了一个DLL,该DLL导出了一个函数,该函数返回一个Array,然后导入到C#应用程序中。 成功使用一个变量:

德尔菲

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

请有人可以转换此代码以与Array一起使用。 意味着从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代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM