Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Главная форма из bpl.  [new]
Mironico
Member

Откуда: Оттуда
Сообщений: 179
Пробую наваять консольную приложуху которая бы подымала из пакета главную форму.

program mynewprogram;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus;

procedure LoadMainForm;
var
  FormClass: TFormClass;
  FmMainForm: TForm;
  Handle: HModule;
begin
  Handle := LoadPackage('FmMainForm.bpl');
  if Handle > 0 then
  begin
    FormClass := TFormClass(GetClass('TFmMainForm'));
    if Assigned(FormClass) then
    begin
      FmMainForm := FormClass.Create(Application);
    end
    else
      ShowMessage('Form class not found');

    UnloadPackage(Handle);
  end
  else
    ShowMessage('Package not found');
end;

begin
  Application.Initialize;
  Application.Run;
  LoadMainForm;
end.


unit f_main_form;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus;

type
  TFmMainForm = class(TForm)
    MainMenu1: TMainMenu;
    N11: TMenuItem;
    N111: TMenuItem;
    N21: TMenuItem;
    N221: TMenuItem;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FmMainForm: TFmMainForm;

implementation
{$R *.dfm}

initialization
  RegisterClass(TFmMainForm);

end.


В результате срабатывает: ShowMessage('Form class not found');

Что я упустил?
Тыкните носом плиз.
4 июл 18, 12:02    [21542055]     Ответить | Цитировать Сообщить модератору
 Re: Главная форма из bpl.  [new]
DimaBr
Member

Откуда:
Сообщений: 10740
Link with Runtime Packages стоит ?
4 июл 18, 12:57    [21542259]     Ответить | Цитировать Сообщить модератору
 Re: Главная форма из bpl.  [new]
Mironico
Member

Откуда: Оттуда
Сообщений: 179
DimaBr
Link with Runtime Packages стоит ?


стоит
4 июл 18, 13:10    [21542302]     Ответить | Цитировать Сообщить модератору
 Re: Главная форма из bpl.  [new]
DimaBr
Member

Откуда:
Сообщений: 10740
тынц
4 июл 18, 13:20    [21542336]     Ответить | Цитировать Сообщить модератору
 Re: Главная форма из bpl.  [new]
DimaBr
Member

Откуда:
Сообщений: 10740
Ну и по идее, сначала создаём форму, а потом запускам Application.Run
4 июл 18, 13:21    [21542340]     Ответить | Цитировать Сообщить модератору
 Re: Главная форма из bpl.  [new]
Mironico
Member

Откуда: Оттуда
Сообщений: 179
DimaBr
Ну и по идее, сначала создаём форму, а потом запускам Application.Run


Пробовал.
Но тут раньше проблема.
Пакет грузит а вот класс из пакета не может получить.
4 июл 18, 13:54    [21542463]     Ответить | Цитировать Сообщить модератору
 Re: Главная форма из bpl.  [new]
Mironico
Member

Откуда: Оттуда
Сообщений: 179
DimaBr
тынц


Получилось. Спасибо!

Есть только 1 проблема: Приложение сразу закрывается поскольку консольное.
4 июл 18, 14:09    [21542534]     Ответить | Цитировать Сообщить модератору
 Re: Главная форма из bpl.  [new]
alekcvp
Member

Откуда:
Сообщений: 1133
DimaBr
тынц

Странный у них код:
if Assigned(<FormName>) then
  begin
  // Destroy the instance if assigned
  <FormName>.Destroy;
  end;
Почему не просто <FormName>.Free; ?
4 июл 18, 14:14    [21542554]     Ответить | Цитировать Сообщить модератору
 Re: Главная форма из bpl.  [new]
DimaBr
Member

Откуда:
Сообщений: 10740
alekcvp
Почему не просто <FormName>.Free; ?

Они не знают что Free проверяет на nil
4 июл 18, 14:25    [21542606]     Ответить | Цитировать Сообщить модератору
 Re: Главная форма из bpl.  [new]
alekcvp
Member

Откуда:
Сообщений: 1133
DimaBr
alekcvp
Почему не просто <FormName>.Free; ?

Они не знают что Free проверяет на nil

Ну да, смешно, понаберут индусов по объявлению...
4 июл 18, 15:35    [21543017]     Ответить | Цитировать Сообщить модератору
 Re: Главная форма из bpl.  [new]
Mironico
Member

Откуда: Оттуда
Сообщений: 179
Походу грузить главную форму из консоли плохая идея...
4 июл 18, 15:48    [21543066]     Ответить | Цитировать Сообщить модератору
 Re: Главная форма из bpl.  [new]
schi
Member

Откуда: Москва
Сообщений: 2601
DimaBr
тынц


Тынц вроде как не отвечает на вопрос ТС, в тынце создают форму и показывают ее внутри методов пакета. Доставать класс из динамически загружаемого пакета затруднительно. Возможно стоит сделать экспортируемую из пакета функцию, возвращающую ссылку на класс или разбираться с манглингом имен в Delphi, тип-то эскпортируется из пакета.
4 июл 18, 15:50    [21543075]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить