Что такое Delphi-эквивалент для LPLONG? - PullRequest
0 голосов
/ 03 января 2019

Мне нужно получить доступ к нескольким функциям DLL, написанной на c из Delphi (в настоящее время Delphi7). Я могу сделать это без проблем, когда параметры скалярные (благодаря примерам, найденным на этом замечательном сайте!), но я застрял на некоторое время, когда в параметрах есть указатель на массив Longs.

Это определение в заголовочном файле одной из функций:

BOOL __stdcall BdcValida (HANDLE h, LPLONG opcl);

(opcl - массив длинных)

И это часть моего кода Delphi:

type
  TListaOpciones= array of LongInt; //I tried with static array too! 
  Popcion = ^LongInt; //tried with integer, Cardinal, word...  
var
  dllFunction: function(h:tHandle;  opciones:Popcion):boolean;stdcall;
  arrayOPciones:TListaOpciones;
  resultado:boolean;
begin
  .....
  I give values ​​to aHandle and array arrayOPciones
  .....
  resultado:=dllFunction(aHandle, @arrayopciones[0]);
end;

Сообщение об ошибке при его выполнении:

"Project xxx выдал слишком много последовательных исключений: нарушение доступа в 0x000 .. "

Что такое эквивалент в Delhpi для LPLONG? Или я вызываю функцию неправильно? Спасибо!

1 Ответ

0 голосов
/ 03 января 2019

LONG отображается на Longint, а LPLONG отображается на ^Longint.Итак, вы правильно перевели этот тип.

Вы перевели BOOL неправильно, хотя.Это должно быть BOOL или LongBool в Delphi.Вы можете использовать любой из них, первый - псевдоним второго.

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

...