Итак, в основном вот что я сделал:
Я создал новое приложение FMHD и разместил на нем TTabControl и Button. Затем я разработал интерфейс IFoo. Чтобы не усложнять, давайте представим, что у него только одна процедура:
type
IFoo = interface
['{D035-N07-M4773R-...}']
procedure makeTab(tc : TTabControl);
End;
Я реализовал этот интерфейс в DLL. DLL загружается через LoadLibrary и экспортирует
function getFoo : IFoo;
MakeTab в основном создает TTabItem и устанавливает tc как родительский:
procedure TFoo.makeTab(tc : TTabControl);
var
tab
: TTabItem;
begin
tab := TTabItem.Create(tc);
tab.text := 'Hi, I am Tab';
tab.Parent := tc;
// ...
end;
Если я что-то забыл, мне очень жаль. В настоящий момент у меня нет точного источника.
Этот метод вызывается при нажатии кнопки в форме.
Но ничего не происходит.
Поэтому я поместил этот метод в свой класс TForm1. Если я позвоню сейчас, будет создана вкладка.
Итак, как я могу создать эту вкладку (и несколько дочерних компонентов) из библиотеки DLL в основной форме приложения?
1 ответ
Основная проблема здесь в том, что вы не можете совместно использовать типы классов Delphi между модулями, использующими библиотеки DLL. Причина в том, что будет несколько версий того, что должно быть одного типа. Одна версия в исполняемом файле и одна версия в каждой DLL, которая его использует.
Это та же хорошо известная проблема, которая существует с VCL, и по этой причине были разработаны пакеты среды выполнения. И это ваше решение для FMX. Если вам нужно разделить типы классов Delphi между модулями, вам нужно, чтобы было одно определение типа. И исполняемые пакеты - это механизм, который делает это возможным.
Итак, прекратите использовать библиотеки DLL, переместите код в пакет времени выполнения, убедитесь, что RTL и FMX связаны с помощью пакетов времени выполнения, и эта проблема будет решена.
Похожие вопросы
Новые вопросы
delphi
Delphi - это язык для быстрой разработки собственных приложений для Windows, macOS, Linux, iOS и Android с использованием Object Pascal. Название относится к языку Delphi, а также к его библиотекам, компилятору и IDE, которые используются для помощи в редактировании и отладке проектов Delphi.