Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 12.06.2019, 18:26   #1
artemavd
Модератор
Заслуженный модератор
 
Регистрация: 05.06.2008
Адрес: г.Иркутск
Сообщений: 4,179
Репутация: 837
Восклицание Загрузка 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, 04:06   #2
xxbesoxx
Профессионал
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Адрес: Грузия Рустави
Сообщений: 1,333
Репутация: 719
Отправить сообщение для xxbesoxx с помощью Yahoo
По умолчанию

https://www.gunsmoker.ru/2012/06/7.html#n2_2
Изображения
Тип файла: jpg 04.jpg (109.7 Кб, 0 просмотров)
Тип файла: jpg 05.jpg (91.4 Кб, 0 просмотров)
Тип файла: jpg 06.jpg (118.5 Кб, 0 просмотров)
Тип файла: jpg 07.jpg (123.9 Кб, 0 просмотров)
Тип файла: jpg 08.jpg (121.1 Кб, 1 просмотров)
Тип файла: jpg 09.jpg (116.7 Кб, 1 просмотров)
__________________
E_MAIL: rijgvina7@yahoo.com
xxbesoxx на форуме   Ответить с цитированием
Старый 13.06.2019, 08:09   #3
artemavd
Модератор
Заслуженный модератор
 
Регистрация: 05.06.2008
Адрес: г.Иркутск
Сообщений: 4,179
Репутация: 837
По умолчанию

Цитата:
Сообщение от 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, 12:41   #4
xxbesoxx
Профессионал
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Адрес: Грузия Рустави
Сообщений: 1,333
Репутация: 719
Отправить сообщение для xxbesoxx с помощью Yahoo
По умолчанию

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

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

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

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

Цитата:
Сообщение от 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 кб.
__________________
E_MAIL: rijgvina7@yahoo.com

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

Цитата:
Сообщение от 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, 17:21   #8
xxbesoxx
Профессионал
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Адрес: Грузия Рустави
Сообщений: 1,333
Репутация: 719
Отправить сообщение для xxbesoxx с помощью Yahoo
По умолчанию

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

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

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

Цитата:
Сообщение от 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 Кб, 1 просмотров)
__________________
E_MAIL: rijgvina7@yahoo.com

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка функции из 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 11:45
Доступ к переменным RealSHELS Общие вопросы Delphi 4 15.06.2008 13:14


23:13.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru