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

Yon*_*ona 6 c# delphi pinvoke interop bytearray

我无法确定让delphi函数在.net的字节数组上运行的最佳方法.

delphi签名如下所示:

procedure Encrypt(
    var Bytes: array of byte;
    const BytesLength: Integer;
    const Password: PAnsiChar); stdcall; export;
Run Code Online (Sandbox Code Playgroud)

C#代码如下所示:

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

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

另外,由于某些原因,我似乎无法在delphi中获取数组的长度,如果我删除BytesLength参数而Length(Bytes)不是工作,如果我添加BytesLength参数,Length(Bytes)开始工作但是BytesLength有一个错误的值.

Dav*_*nan 3

将 Delphi 的第一个参数设置EncryptBytes: PByte,然后就可以开始了。

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