Вопрос к спецам по WinAPI

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

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

Ответить
slyubez
постоялец
Сообщения: 186
Зарегистрирован: 31.03.2015 07:44:07

Вопрос к спецам по WinAPI

Сообщение slyubez »

Приветствую уважаемых коллег.

Прошу подсказать, чем можно в FPC заменить строчку, которая компилируется в Delphi:

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

@HtmlHelpAProc:=GetProcAddress(HtmlHelpModule, 'HtmlHelpA'); 

Ругается таким сообщением:
helpunit.pas(432,7) Error: Can't assign values to an address

Объявление типа:

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

THtmlHelpAProc=function(hWndCaller: HWND; pszFile: PAnsiChar; 
 uCommand: UINT; dwData: DWORD): HWnd; stdcall;
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

не надо @ в Mode-ObjFPC ;
либо вставить {$mode Delphi} в начале исходного кода модуля
kazalex
постоялец
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Сообщение kazalex »

slyubez
Либо включи режим совместимости с Delphi {$mode delphi}, либо перепиши код:

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

HtmlHelpAProc:=THtmlHelpAProc(GetProcAddress(HtmlHelpModule, 'HtmlHelpA')); 
slyubez
постоялец
Сообщения: 186
Зарегистрирован: 31.03.2015 07:44:07

Сообщение slyubez »

Коллеги, спасибо. Код скомпилировался, но, увы, пока не заработал. Я решил остаться в режиме FPC и заменил код, как показано выше, но функция WinAPI работать не хочет, хотя отладчик показывает, что параметры передаются верно. Сообщений не выдается. Попробую сейчас отловить код ошибки.

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

function _HtmlHelpSetup : Boolean;
begin
  if (HtmlHelpModule = 0)
   then begin
            HtmlHelpModule := LoadLibrary('hhctrl.ocx');
            if (HtmlHelpModule <> 0)
            then HtmlHelpAProc:=THtmlHelpAProc(GetProcAddress(HtmlHelpModule, 'HtmlHelpA'));           
          end;
  Result:=Assigned(HtmlHelpAProc);
end;

function HtmlHelpA(hWndCaller: HWND; pszFile: PAnsiChar; uCommand: UINT;
                   dwData: DWORD): HWND;
begin
  Result := 0;
  if _HtmlHelpSetup
   then Result := HtmlHelpAProc(hWndCaller, pszFile, uCommand, dwData);
end;


Добавлено спустя 54 минуты 12 секунд:
Не заметил косяк в имени файла. Теперь всё завелось. Ещё раз спасибо за подсказки.
Ответить