Вызов функции delphi dll из C #, передаваемой в байтовом массиве - PullRequest
5 голосов
/ 04 августа 2011

У меня проблемы с поиском наилучшего способа работы функции 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);

Пропуск var и ref до того, как объявление байтового массива казалось неудачным, но требуется ли это, поскольку я буду изменять только содержимое массива, а не сам массив?

Кроме того, по какой-то причине я не могу получить длину массива в delphi, если я удалю параметр BytesLength, чем Length(Bytes) не будет работать, если я добавлю параметр BytesLength, Length(Bytes) начинает работать, но BytesLength имеет неправильное значение.

1 Ответ

2 голосов
/ 04 августа 2011

Сделайте первый параметр Delphi Encrypt равным Bytes: PByte, и вам будет хорошо идти.

В открытом массиве, как он есть, ожидается, что будет передан как указатель на первый элемент, так и длина, объясняющая, что вы описываете в своем вопросе.

...