строка delphi в "const buffer" - PullRequest
       2

строка delphi в "const buffer"

0 голосов
/ 22 апреля 2011

У меня есть dll, процедура которого принимает: параметр "const buffer".

Существует также пример передачи значения этому параметру:

var
str: array [0..200 - 1] of Char;
LTextSend: string;
begin
  LTextSend := 'Text';
  StrLCopy(PChar(@str[0]), PChar(LTextSend), High(str));

  Dll_procedure(str, Length(LTextSend));
end;
  1. этот параметр может быть передан только через это объявление: str: array [0..200 - 1] Char;

  2. Нет ли более простого способа передать строку (разной длины) в этот параметр dll?

Спасибо

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

Вы можете вызвать процедуру следующим образом:

DLL_procedure(str[1], Length(str));

Это работает, потому что нетипизированные параметры Delphi отправляются так же, как параметры var, они отправляются по ссылке. Компилятор отправит указатель на str[1], первый символ в строке, но на самом деле это указатель на всю строку. Как обычно, убедитесь, что строка действительно содержит первый символ (то есть: он не пустой).

Ваша проблема номер 1 полностью зависит от DLL. «Подпись» позволяет отправлять данные любой длины, но это не означает, что DLL подготовлена ​​для чего-либо. Может быть, он может обрабатывать только 200 байтов за раз.

0 голосов
/ 22 апреля 2011

Я не знаю, почему вы делаете копию во временный буфер.

Это имеет смысл, только если Dll_procedure изменит буфер. Но я сомневаюсь, что так и будет.

Так что вы можете просто написать:

Dll_procedure(Pointer(LTextSend)^, Length(LTextSend));

Или вариант, делающий строку уникальной перед вызовом:

Dll_procedure(LTextSend[1], Length(LTextSend));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...