Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2013, 12:33   #1
Smallboy
Пользователь
 
Регистрация: 16.07.2013
Сообщений: 28
По умолчанию Внешняя процедура

Добрый день!
Возник вопрос, не могу разобраться в ситуации. В длл есть процедура
SetCallbackInterface(Proc: Pointer; Buf:Pointer); stdcall;

proc - указатель на процедуру в программе
ига - указатель на буфер

данная процедура регистрирует внешнюю процедуру и буфер обмена.
если в ходе выполнения других функций из длл возникает необходимость взаимодействия с пользователем, то длл вызывает зарегистрированную процедуру(proc) и общается с программой через буфер, т.е изначально получает какие-то значения из буфера, потом дает ответ в буфер и завершает работу.
Вот пример как должно работать
Код:

Type
  TBuffer = record
     поля
  end;

  TProc = procedure;
 
  procedure CallBackProc;
  procedure SetcallBackInterface(Proc: Pointer; Buf:Pointer); stdcall;

Var
  Buffer: TBuffer;
  Proc: Tproc;

procedure TFrom6.CallBackProc;
begin
  WriteBuffer; // выводит данные буфера на экран;
end
 
procedure TForm6.CalculateResult;
begin
...
Proc:=@CallBackProc; // тут ошибка variable required
SetCallBackInterface(Proc, @Buffer); 
// тут мы регистрируем внешнюю процедуру и буфер
...
 calculate(x,y); \\тут мы вызываем какую-то функцию из длл
// если данной функции необходимо получить от пользователя какие-то
//дополнительные данные то она должна вызвать зарегистрированную 
//процедуру CallBackProc и общаться через буфер.
...
end
суть проблемы : не получается выполнить регистрацию внешней процедуры.
Если ставить SetCallBackInterface(nil, @Buffer); то все работает.
Если ставить SetCallBackInterface(@CallBackProc, @Buffer); то таже ошибка variable required
Smallboy вне форума Ответить с цитированием
Старый 15.11.2013, 13:50   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Код:
  TProc = procedure;
            pProc= ^TProc;
 
  procedure CallBackProc;
  procedure SetcallBackInterface(Proc: pProc; Buf:Pointer); stdcall;

SetcallBackInterface(@CallBackProc,SuperBuff);
как-то так..
Человек_Борща вне форума Ответить с цитированием
Старый 15.11.2013, 16:17   #3
Smallboy
Пользователь
 
Регистрация: 16.07.2013
Сообщений: 28
По умолчанию

Спасибо, все работает
Smallboy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка - внешняя процедура Pljus1 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 24.11.2010 11:08
Внешняя сортировка Blond_89 Паскаль, Turbo Pascal, PascalABC.NET 0 01.04.2010 12:10
Внешняя сортировка. Evgeshk@ Общие вопросы C/C++ 0 20.12.2009 23:58
Внешняя сортировка Ashraf Помощь студентам 1 29.05.2008 08:56