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


Автор: Bose 29.10.2006, 15:05
Delphi 7.
Создаю BPL плагин с помощью TjvPlugin Wizard из пакета JEDI VCL.

В программе подгружаю с помощью TjvPluginManager. Если в проекте включен FastMM4 а в плагине - нет, то получаю AccessViolation(а то и зависание) в момент вызова ф-ции RegisterPlugin в плагине. Текст ф-ции:
Код

RegisterPlugin: TMyJvPlugin;
begin
  result:=TMyJvPlugin.create(nil)
end; 


В конфигурации FastMm4 включены все флаги отвечающие за разделение памяти. Если подключить FastMM4 и к плагину, и подгрузить из программы несколько копий этого плагина, то при загрузке каждого из них получаю сообщение о том, что "FastMM4" уже загружен и не может быть проинсталлен... (точного сообщения не помню, но если нужно - могу привести текст). И плюс, при закрытии приложения после этого намертво зависают Delphi. 

Проблема одна, а вопроса всё-таки 2(нелогично разносить по 2м темам): 
1) Кто-нибудь сталкивался с подобным?
2) Нужно ли подключать дополнительные менеджеры памяти,  чтобы создавать объекты в BPL и использовать в программе, или механизм работы BPL сам по себе поддерживает разделение?

Автор: Bose 29.10.2006, 18:28
Цитата(Bose @  29.10.2006,  15:05 Найти цитируемый пост)
И плюс, при закрытии приложения после этого намертво зависают Delphi. 

с этим кажется разобрался - судя по всему, это происходило из-за того, что я забывал выгрузить BPL после загрузки. smile 

Автор: Sansa 31.10.2006, 16:21
Я с таким сталкивался. Действительно, если не выгружать плагины, то выходим на Access Violation. Менеждеры памяти необходимо использовать, если в библиотеку передаются строки, а не PChar. 
К сожалению не помню, что передает TjvPlugin при вызове, а посмотреть негде. И ишо. Когда я в плагин пытался встроить форму, то без конструкции в плагине вида:
Код

var
  OldApp: TApplication;
function Initialize(Manager: TComponent; HostApplication: TApplication;
      FileName: string): Boolean; virtual; stdcall;
begin
  OldApp:= Application;
  Application:= HostApplication;
end; 

... те же грабли.

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