Проблемы с получением данных из DLL

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Mad_Scientist
незнакомец
Сообщения: 1
Зарегистрирован: 30.09.2010 09:54:43

Проблемы с получением данных из DLL

Сообщение Mad_Scientist »

Доброго времени суток.

Обнаружил глюк в Лазарусе. Возникает при попытке скомпилировать вызов функции из DLL

Код: Выделить всё

type
  TOpenDevice = function:Longint;stdcall;
var
  OpenDevice:TOpenDevice;

function LoadK8061(out Handle:THandle):cardinal;
//функция загружает библиотеку и подключает все функции
begin
  Handle:=SafeLoadLibrary('K8061.dll'); //Динамически подключаем библиотеку
  if Handle>32 then
  begin
    result:=0;
    OpenDevice:=TOpenDevice(GetProcAddress(Handle,'OpenDevice'));
    if @OpenDevice=nil then result:=2;
    {.......}
  end
  else
  begin
    result:=1;
  end;
end;


Если вызываем функцию без требования вернуть результат:

Код: Выделить всё

OpenDevice;

То все компилируется нормально, а если с результатом

Код: Выделить всё

N:=OpenDevice;

то компилятор отругивается ошибкой типа:
unit1.pas(157,8) Error: Incompatible types: got "<procedure variable type of function:LongInt;StdCall>" expected "LongInt"
Кто знает что я делаю не так?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Код: Выделить всё

N:=OpenDevice();
Ответить