Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2019, 17:26   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
Восклицание Загрузка BPL в RunTime, как обратиться к переменным?

Добрый день!
Не получается загрузить BPL в RunTime:
Код:
procedure TMainForm.UniButton3Click(Sender: TObject);
var
  PackForm:TForm;
  FormClass:TForm;
  hPack:HMODULE;
begin
  hPack:= LoadPackage(ExtractFilePath(ParamStr(0)) + 'test_bpl.bpl');
  if hPack > 0 then
  begin
    FormClass:= TForm(GetClass('TForm'));
    if Assigned(FormClass) then
    begin
      PackForm:= FormClass.Create(Application);
      PackForm.ShowModal;
    end
    else
  end
  else
end;
В BPL находится форма, на которой есть кнопка, при нажатии которую выводится сообщение.
После того как пытаюсь загрузить пакет, то ошибки никакой не появляется, но и моя форма из BPL не создается в моем приложении.

Прошу помощи. Хорошо, если есть пример.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.06.2019, 03:06   #2
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

https://www.gunsmoker.ru/2012/06/7.html#n2_2
Изображения
Тип файла: jpg 04.jpg (109.7 Кб, 136 просмотров)
Тип файла: jpg 05.jpg (91.4 Кб, 133 просмотров)
Тип файла: jpg 06.jpg (118.5 Кб, 129 просмотров)
Тип файла: jpg 07.jpg (123.9 Кб, 147 просмотров)
Тип файла: jpg 08.jpg (121.1 Кб, 144 просмотров)
Тип файла: jpg 09.jpg (116.7 Кб, 128 просмотров)
xxbesoxx вне форума Ответить с цитированием
Старый 13.06.2019, 07:09   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
Ну, попробовал сделать по картинкам.
Если я правильно поняло последовательность действий:
1. Добавить проект с BPL к существующему главному проекту - сделано;
2. Прописать в initialization имя класса формы, которая подключается - сделано;
3. Написать в кнопке главного проекта код загрузки BPL - не получается. Вернее код есть, но ничего не происходит, форма не появляется, но и ошибки никакой нет:
Код:
procedure TMainForm.Button3Click(Sender: TObject);
var
  PackForm: TForm;
  FormClass: TPersistentClass;
  hPack: HModule;
begin
  hPack:=LoadPackage('test_bpl.bpl');
  if hPack <> 0 then
  begin
    FormClass:=GetClass('TForm1');
    if FormClass <> nil then
    begin
      PackForm:=TComponentClass(FormClass).Create(Application) as TForm;
      PackForm.ShowModal;
    end;
  end;
end;
А зачем в uses главного проекта прописывать имя модуля из bpl пакета?
И еще вопрос: будет ли у меня код в событиях компонент работать и взаимодействовать с главным проектом, его переменными глобальными и т.д.?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.06.2019, 11:41   #4
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
И еще вопрос: будет ли у меня код в событиях компонент работать и взаимодействовать с главным проектом, его переменными глобальными и т.д.?
взаимодействовать с главным проектом у меня не работает-может кто то из форума его знаеть... А если на одну .BPL создать несколько форма - то, он будет между собой взаимодействовать.
-- ещё там не забудь
Цитата:
rtl;vcl (для Delphi XE и ниже)
rtl;vcl;fmx (для Delphi XE2 и выше)
Заметьте, что порядок указания пакетов роли не играет. Также не имеет значения, если вы укажете пакет vcl, но не будете использовать формы в плагине - если в исполняемом модуле (module) нет ни одного модуля (unit) из пакета - то пакет к вашему модулю присоединяться не будет. Нет никакой необходимости агрессивно чистить список используемых пакетов.

После включения пакетов в плагины и их пересборки - все файлы плагинов уменьшаются до размеров от 28 до 100 Кб. В среднем - около 40 Кб на один плагин.
Цитата:
А зачем в uses главного проекта прописывать имя модуля из bpl пакета?
Правильно... Не нужно.!
Изображения
Тип файла: jpg ещё_такой.jpg (118.3 Кб, 138 просмотров)

Последний раз редактировалось xxbesoxx; 13.06.2019 в 11:49.
xxbesoxx вне форума Ответить с цитированием
Старый 13.06.2019, 12:03   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
взаимодействовать с главным проектом у меня не работает-может кто то из форума его знаеть... А если на одну .BPL создать несколько форма - то, он будет между собой взаимодействовать.
-- ещё там не забудь
Правильно... Не нужно.!
А если я использую сторонние компоненты, то как мне посмотреть какие нужно bpl прописать в свойства проекта?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.06.2019, 13:52   #6
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
посмотреть какие нужно bpl прописать в свойства проекта?
-- Прописать да...
-- и если нужно создать несколько форму который должен между собой взаимодействовать то надо их создать на одну .BPL
-- Потом когда проект нужно запустит на второе ПК и если 64-бит-ни ОС надо коптровать Copy ---> C:\Windows\SysWOW64 и когда 32-бит. Copy ---> C:\Windows\System32 .bpl файл из C:\Users\Public\Documents\RAD Studio\10.0\Bpl
преимущества в том, когда проекть большой -много форм - там .exe файл размер 2.555 кб.

Последний раз редактировалось xxbesoxx; 13.06.2019 в 13:58.
xxbesoxx вне форума Ответить с цитированием
Старый 13.06.2019, 14:32   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
-- Прописать да...
-- и если нужно создать несколько форму который должен между собой взаимодействовать то надо их создать на одну .BPL
-- Потом когда проект нужно запустит на второе ПК и если 64-бит-ни ОС надо коптровать Copy ---> C:\Windows\SysWOW64 и когда 32-бит. Copy ---> C:\Windows\System32 .bpl файл из C:\Users\Public\Documents\RAD Studio\10.0\Bpl
преимущества в том, когда проекть большой -много форм - там .exe файл размер 2.555 кб.
А где надо прописать конкретно?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.06.2019, 16:21   #8
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
А если я использую сторонние компоненты,
Если вы имеете в виду создание собственных компонент Delphi то его можно установить обычно.... все .Bpl файл компилируется=создаётся на путь -> C:\Users\Public\Documents\RAD Studio\10.0\Bpl и можно от туда копировать... Прописать нигде нечего не нужно... Просто когда проекте применяется .Bpl и на него есть несколько компоненти+ форми+ кнопки и.т.г и это проект чтобы работал на другой ПК надо копировать это Bpl и вставить на C:\Windows\SysWOW64 или можно создать инсталлятор... короче: практиковать надо

Последний раз редактировалось xxbesoxx; 13.06.2019 в 16:24.
xxbesoxx вне форума Ответить с цитированием
Старый 13.06.2019, 17:45   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
Если вы имеете в виду создание собственных компонент Delphi то его можно установить обычно.... все .Bpl файл компилируется=создаётся на путь -> C:\Users\Public\Documents\RAD Studio\10.0\Bpl и можно от туда копировать... Прописать нигде нечего не нужно... Просто когда проекте применяется .Bpl и на него есть несколько компоненти+ форми+ кнопки и.т.г и это проект чтобы работал на другой ПК надо копировать это Bpl и вставить на C:\Windows\SysWOW64 или можно создать инсталлятор... короче: практиковать надо
А код программный, который я напишу в этой bpl, он будет работать?
Например, если я напишу сложение двух значений из двух Edit'ов, то при нажатии на кнопку у меня должна получиться сумма (это к примеру код просто) введенных значений.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.06.2019, 20:27   #10
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
А код программный, который я напишу в этой bpl, он будет работать? Например, если я напишу сложение двух значений из двух Edit'ов,
На .bpl-е создаем форму и потом Edit'ов и все что нужно. Потом: чтобы "программа" работал на другом ПК надо копировать из C:\Users\Public\Documents\RAD Studio\10.0\Bpl тот bpl=который вы создали и + rtl_xx; vcl_xx; и вставить на С:\Windows\SysWOW64
Изображения
Тип файла: jpg ещё_такой.jpg (118.4 Кб, 159 просмотров)

Последний раз редактировалось xxbesoxx; 13.06.2019 в 20:42.
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка функции из dll, как победить RunTime Winexcel Общие вопросы Delphi 4 01.07.2014 13:40
Доступ к переменным Aleksandr_59 Общие вопросы Delphi 10 13.04.2012 12:57
Вопрос по переменным ronston Общие вопросы C/C++ 6 06.10.2010 10:27
Runtime runtime = Runtime.getRuntime(); Pti44ka Общие вопросы по Java, Java SE, Kotlin 1 22.11.2009 10:45
Доступ к переменным RealSHELS Общие вопросы Delphi 4 15.06.2008 13:14