【问题标题】:Call delphi dll function from C# passing in a byte array从 C# 调用 delphi dll 函数,传入一个字节数组
【发布时间】:2011-08-03 21:15:22
【问题描述】:

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

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) 将不起作用,如果我添加 BytesLength 参数,@987654328 @ 开始工作,但 BytesLength 的值错误。

【问题讨论】:

    标签: c# delphi interop pinvoke bytearray


    【解决方案1】:

    将Delphi Encrypt 的第一个参数设为Bytes: PByte,你应该可以开始了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      相关资源
      最近更新 更多