Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Работа с хэндлом


Автор: ASGDeveloper 7.11.2006, 14:49
Возник вопрос, можно ли хэндл полученный локально перевести в глобальный. Приведу пример:
Получение локального хэндла:
Код

var
  h: THandle;
  Reg: TRegistry;
begin
  h := LoadLibrary('test.dll');
  ...
  Reg.WriteInteger('handle', h);
  ...
end;

Попытка использовать его глобально (из другой программы после выполнения указанного выше кода):
Код

var
  h: THandle;
  Reg: TRegistry;
begin
  h := ReadInteger('handle');
  @MyProc := GetProcAddress(h, 'MyProc');

Проблема в том, что указанный выше код не работает (и в принципе не должен), поэтому встает вопрос "что делать". smile

Автор: Snowy 7.11.2006, 15:00
Передай имя dll-ки и в другой программе тоже загрузи.
Как ты собираешься вызывать процедуру, не подключив dll к процессу?

Автор: ASGDeveloper 7.11.2006, 15:25
Цитата

Как ты собираешься вызывать процедуру, не подключив dll к процессу? 

Оч просто smile Длл-ку загружает один процесс, а юзают ее все. smile

Автор: Snowy 7.11.2006, 15:31
Ну тогда твой процесс должен подключить эту dll к другим процессам, если они сами не хотят этого делать.
Не загружая dll в адресное пространство процесса юзать её невозможно.
То что она загружена в адресное пространство другого процесса - ничего не значит.
Это чужое пространство. Юзать его нельзя smile

Автор: dumb 7.11.2006, 15:37
Цитата(ASGDeveloper @  7.11.2006,  15:25 Найти цитируемый пост)
Длл-ку загружает один процесс, а юзают ее все.

класс! smile
чтобы "юзать", надо создать проекцию библиотеки в адресном пространстве "юзающего" процесса, чем и занимается LoadLibrary.

btw, хэндлы у каждого процесса свои.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)