【问题标题】:Delphi Dll to C#Delphi Dll 到 C#
【发布时间】:2014-03-05 21:39:40
【问题描述】:

尝试了很多例子并没有成功 我有一个用 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# 代码的源代码。

【问题讨论】:

    标签: c# delphi pinvoke


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多