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

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

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

Сообщение Sphinx » 27.09.2005 22:26:03

STAKANOV
Я много уже чего подозреваю :)
Завтра ради интереса попробую в один .ехе запихнуть...
Посмотрю что будет.
Sphinx
новенький
 
Сообщения: 33
Зарегистрирован: 27.09.2005 21:52:09

Сообщение Иван Шихалев » 28.09.2005 00:18:51

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

Сообщение Sphinx » 28.09.2005 09:08:27

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

Имеется .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.
Sphinx
новенький
 
Сообщения: 33
Зарегистрирован: 27.09.2005 21:52:09

Сообщение Иван Шихалев » 29.09.2005 00:50:54

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

Что-то сразу не заметил... Delphi, а вслед за нею и FPC в режиме совместимости, поддерживает синтаксис обращения к процедурным переменным в стиле Turbo Pascal - собака перед переменной. В режиме ObjFPC этот стиль идет лесом. В статье о режимах этого не было, поскольку тема достаточно запутанная и не слишком часто нужная.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Пред.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29

Рейтинг@Mail.ru