Присвоение указателя переменной

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Sphinx
новенький
Сообщения: 33
Зарегистрирован: 27.09.2005 21:52:09

Сообщение Sphinx »

STAKANOV
Я много уже чего подозреваю :)
Завтра ради интереса попробую в один .ехе запихнуть...
Посмотрю что будет.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

А зачем нужен указатель на процедурный тип? Что-то я всего замысла не понимаю...
Sphinx
новенький
Сообщения: 33
Зарегистрирован: 27.09.2005 21:52:09

Сообщение Sphinx »

Иван Шихалев
Я же кратко описывал...

Имеется .dll в которой находится код создания окна и цикл обработки оконных сообщений. И требуется иногда возвращать управление обратно в .ехе файл для выполнения некоторых операций (опять же через вызовы функций библиотеки в основном)

То есть в .exe примерно следующее:

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

...
function CallBackFunction(inValue: Double): HResult; stdcall;
begin
  ...
  Result := S_OK;
end;
...
  if Failed(InitLibrary) then CloseProgram;
  if Failed(CreateLibraryWindow) then CloseProgram;
  RunMainLoop(@CallBackFunction);
  CloseProgram;
end.

а в .dll примерно следующее:

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

...
type
  PCallBackProc = ^TCallBackProc;
  TCallBackProc = function(inValue: Double): HResult; stdcall;
...
procedure RunMainLoop(CallBackProc: PCallBackProc);
var
  ExeCallBackProc : TCallBakProc;
  ...
begin
  @ExeCallBackProc := CallBackProc;  // вот эта строка компилится только в {$MODE DELPHI}
...
  while boolAppRun do
    begin
      if PeekMessage(recLibWindow.MSG, 0, 0, 0, PM_REMOVE) then
        TranslateMessage(...);
        DispatchMessage(...);
      else
        if Failed(ExeCallBackProc) then
          boolAppRun := False; // delete If Assigned()
...

писал по памяти - мог чуть-чуть приврать в синтаксисе команд Windows.
Кроссплатформенность не нужна, компилить буду только под Win.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Вот собственно и вопрос...почему именно {$MODE DELPHI}

Что-то сразу не заметил... Delphi, а вслед за нею и FPC в режиме совместимости, поддерживает синтаксис обращения к процедурным переменным в стиле Turbo Pascal - собака перед переменной. В режиме ObjFPC этот стиль идет лесом. В статье о режимах этого не было, поскольку тема достаточно запутанная и не слишком часто нужная.
Ответить