Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Главная форма из bpl. / 12 сообщений из 12, страница 1 из 1
04.07.2018, 12:02
    #39669384
Mironico
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Главная форма из bpl.
Пробую наваять консольную приложуху которая бы подымала из пакета главную форму.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
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.



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
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');

Что я упустил?
Тыкните носом плиз.
...
Рейтинг: 0 / 0
04.07.2018, 12:57
    #39669439
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Главная форма из bpl.
Link with Runtime Packages стоит ?
...
Рейтинг: 0 / 0
04.07.2018, 13:10
    #39669449
Mironico
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Главная форма из bpl.
DimaBr Link with Runtime Packages стоит ?

стоит
...
Рейтинг: 0 / 0
04.07.2018, 13:20
    #39669458
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Главная форма из bpl.
...
Рейтинг: 0 / 0
04.07.2018, 13:21
    #39669459
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Главная форма из bpl.
Ну и по идее, сначала создаём форму, а потом запускам Application.Run
...
Рейтинг: 0 / 0
04.07.2018, 13:54
    #39669480
Mironico
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Главная форма из bpl.
DimaBrНу и по идее, сначала создаём форму, а потом запускам Application.Run

Пробовал.
Но тут раньше проблема.
Пакет грузит а вот класс из пакета не может получить.
...
Рейтинг: 0 / 0
04.07.2018, 14:09
    #39669497
Mironico
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Главная форма из bpl.
DimaBr тынц

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

Есть только 1 проблема: Приложение сразу закрывается поскольку консольное.
...
Рейтинг: 0 / 0
04.07.2018, 14:14
    #39669499
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Главная форма из bpl.
DimaBr тынц
Странный у них код:
Код: pascal
1.
2.
3.
4.
5.
if Assigned(<FormName>) then
  begin
  // Destroy the instance if assigned
  <FormName>.Destroy;
  end;

Почему не просто <FormName>.Free; ?
...
Рейтинг: 0 / 0
04.07.2018, 14:25
    #39669505
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Главная форма из bpl.
alekcvpПочему не просто <FormName>.Free; ?
Они не знают что Free проверяет на nil
...
Рейтинг: 0 / 0
04.07.2018, 15:35
    #39669548
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Главная форма из bpl.
DimaBralekcvpПочему не просто <FormName>.Free; ?
Они не знают что Free проверяет на nil
Ну да, смешно, понаберут индусов по объявлению...
...
Рейтинг: 0 / 0
04.07.2018, 15:48
    #39669556
Mironico
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Главная форма из bpl.
Походу грузить главную форму из консоли плохая идея...
...
Рейтинг: 0 / 0
04.07.2018, 15:50
    #39669558
schi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Главная форма из bpl.
DimaBr тынц

Тынц вроде как не отвечает на вопрос ТС, в тынце создают форму и показывают ее внутри методов пакета. Доставать класс из динамически загружаемого пакета затруднительно. Возможно стоит сделать экспортируемую из пакета функцию, возвращающую ссылку на класс или разбираться с манглингом имен в Delphi, тип-то эскпортируется из пакета.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Главная форма из bpl. / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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