Как распознать Зарегистрированные классы в пакете Delphi - PullRequest
0 голосов
/ 12 июня 2009

Я просматриваю большинство своих приложений и портирую их на D2009, и у меня есть одно приложение, которое использует динамические пакеты. На всю жизнь я не могу заставить свое хост-приложение распознавать классы, зарегистрированные в пакете. Я проследил и раздел инициализации в загружаемом пакете был вызван и RegisterClasses был вызван, но когда я делаю вызов GetClass (), классы недоступны. Есть ли кто-нибудь, кто может просветить меня о том, что может происходить? Я исследовал и посмотрел, есть ли какие-либо проблемы с выпуском D2009 и динамическими пакетами, и до сих пор я ничего не нашел. Я начинаю задумываться, не повреждена ли у меня установка Delphi или какая-то другая проблема.

ТИА

Ответы [ 2 ]

2 голосов
/ 13 июня 2009

Если вы используете сторонний менеджер памяти, убедитесь, что он работает с D2009 (на самом деле 2007 и выше).

С FastMM (который является MM по умолчанию с 2007 года) вам придется установить определение UseRuntimePackages в FastMM4Options.inc

0 голосов
/ 09 сентября 2009

убедитесь, что выполнены следующие шаги:

  • Создать новый пакет в Delphi;
  • Вставьте форму в этот пакет;
  • Вставить в форму раздел «инициализация» и использовать метод RegisterClass. (RegisterClass (TForm1)); Не забывайте "T".
  • Сохраните и скомпилируйте пакет;
  • Закрыть все;
  • Скопируйте файл .bpl (c: \ Users \ Public \ Documents \ RAD Studio \ 5.0 \ Bpl) в папку приложения;
  • Создать новое приложение в Delphi;
  • Зайдите в Проект> Параметры> Пакеты и установите флажок «Сборка с помощью пакетов времени выполнения»;
  • Оставьте только "vcl; rtl" в текстовом поле и нажмите кнопку ОК;
  • Вставить кнопку;
  • В источнике кнопки введите код:

процедура TForm1.Button1Click (Отправитель: TObject);

вар

PackageModule: HModule; AClass: TPersistentClass;

начать

PackageModule: = LoadPackage ('Package1.bpl');

если PackageModule <> 0, то начать AClass: = GetClass ('TForm2');

if AClass <> nil then
  with TComponentClass(AClass).Create(Application)
    as TCustomForm do
  begin
    ShowModal;
    Free;
  end;

UnloadPackage(PackageModule);

конец;

конец;

  • Скомпилируйте приложение. =) * * Тысячу сорок-пять
...