powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание функций в ран-тайме (?)
6 сообщений из 6, страница 1 из 1
Создание функций в ран-тайме (?)
    #40079643
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
работаю с группой библиотек, каждой надо передать коллбэк
Передаю её при начале работы с библиотекой
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  procedure log(ARef: PAnsiChar; ACateg: Int32); cdecl;
var
  str: string;
begin
  str := 'Log: ' + IntToStr(ACateg) + ' ' + ResultToString(ARef);
  OutputDebugString(PChar(str));
end;
...
  FLib := LoadLibrary(PWideChar(AFileName));
  if FLib = 0 then
    raise Exception.CreateFmt('Не удалось загрузить библиотеку %s : %s', [AFileName, SysErrorMessage(GetLastError)]);
  try
    FInitFunc := GetProcAddress(FLib, 'init');
    FCallFunc := GetProcAddress(FLib, 'callFunc');
    if not Assigned(FInitFunc) then
      raise Exception.CreateFmt('Библиотека %s не содержит функцию %s', [AFileName, 'init']);
    if not Assigned(FCallFunc) then
      raise Exception.CreateFmt('Библиотека %s не содержит функцию %s', [AFileName, 'callFunc']);

    FInitFunc(@newMemory, @ACallBackFunc, @log);




Хочу различать - из какой библиотеки пришел log

Можно ли как-то изящно передавать одну функцию во все библиотеки. чтобы потом иметь возможность различать откуда

Или как-то в ран-тайме конструировать функции? Типа как MakeObjectInstance
...
Рейтинг: 0 / 0
Создание функций в ран-тайме (?)
    #40079646
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747,

Добавить в функцию каллбэка еще и имя вызывающей библиотеки?
...
Рейтинг: 0 / 0
Создание функций в ран-тайме (?)
    #40079647
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747Можно ли как-то изящно передавать одну функцию во все библиотеки. чтобы потом иметь
возможность различать откуда

Для этого все нормальные функции, принимающие коллбэк, обычно принимают ещё один
дополнительный параметр, который скармливают коллбэку как есть:
Код: sql
1.
2.
3.
4.
Procedure foo(callback: CallbackFunc; param: Pointer);
begin
   callback(param);
end;


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание функций в ран-тайме (?)
    #40079663
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если нет возможности влиять на интерфейс, то

function Log()...

function Log1()
begin
Log('DLL1', ...)
end

function Log2()
begin
Log('DLL2', ...)
end

но лучше добавить параметр UserData
...
Рейтинг: 0 / 0
Создание функций в ран-тайме (?)
    #40079678
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747

Хочу различать - из какой библиотеки пришел log


Если нет возможности добавить пользовательский параметр, смотрите на адрес возврата: для разных библиотек он будет разным, скорее всего.
Если вызов callback делает сама библиотека, то из адреса возврата можно получить имя библиотеки.
...
Рейтинг: 0 / 0
Создание функций в ран-тайме (?)
    #40079733
Aniskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание функций в ран-тайме (?)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]