从C#调用delphi dll函数传入一个字节数组

时间:2011-08-03 21:15:22

标签: c# delphi interop pinvoke bytearray

我无法找到让.phi上的字节数组运行delphi函数的最佳方法。

delphi签名如下所示:

procedure Encrypt(
    var Bytes: array of byte;
    const BytesLength: Integer;
    const Password: PAnsiChar); stdcall; export;

C#代码如下所示:

[DllImport("Encrypt.dll",
    CallingConvention = CallingConvention.StdCall,
    CharSet = CharSet.Ansi)]
public static extern void Encrypt(
    ref byte[] bytes,
    int bytesLength,
    string password);

在字节数组声明之前省略varref似乎失败了,但它是否必需,因为我只更改数组的内容而不是数组本身?

另外,由于某些原因,我似乎无法在delphi中获取数组的长度,如果我删除BytesLength参数而不是Length(Bytes)将不起作用,如果我添加{{1 }}}参数,BytesLength开始工作,但Length(Bytes)的值不正确。

1 个答案:

答案 0 :(得分:2)

将Delphi Encrypt的第一个参数设为Bytes: PByte,你应该好好去。

正如你所拥有的那样,打开数组希望传递指向第一个元素的指针和解释你在问题中描述的内容的长度。