![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 15.09.2008
Сообщений: 3
|
![]()
здравствуйте, хочу создать компонент на форме (например кнопку), используя процедуру создания компонента, заложенную в dll-ке.
главный модуль: unit ButtUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus; type TForm1 = class(TForm) MainMenu1: TMainMenu; A: TMenuItem; Button1: TMenuItem; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; procedure ButtCreate(Form:TForm); external 'ButtDLL' index 1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ButtCreate(Form1); end; end. библиотека: library ButtDLL; { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } uses SysUtils, Classes, StdCtrls, Forms; {$R *.res} procedure ButtCreate(Form:TForm); var But:TButton; begin But:=TButton.Create(Form); But.Left:=50; But.Top:=50; But.Parent:=Form ; end; exports ButtCreate index 1; begin end. отладчик выдает ошибку на строчке в библиотеке : But.Parent:=Form ; помогите, пожалйста, как ее можно устранить? |
![]() |
![]() |
![]() |
#2 | |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]()
Попробуй без этой строки, ведь при создании ты уже указывал Form:But:=TButton.Create(Form);
Цитата:
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 15.09.2008
Сообщений: 3
|
![]()
а без этой строки компонент создается, только его не видно...
visible не прокатит Последний раз редактировалось Filil; 14.09.2009 в 21:26. |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]()
В приложении и dll разные наборы классов (линкуются разные копии модулей vcl со своими секциями инициализации). Поэтому передавайте класс в dll. Тогда Вы сможете создать и использовать объект этого класса.
Код:
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 15.09.2008
Сообщений: 3
|
![]()
alexBlack, спасибо большое за помощь!
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание компонента | Neobrat | Компоненты Delphi | 3 | 01.05.2009 09:52 |
создание компонента | Bayazet | Общие вопросы Delphi | 4 | 17.12.2008 16:48 |
Создание компонента | russianstrike | Компоненты Delphi | 15 | 01.10.2008 19:22 |
Посылаем адресс компонента в dll | Altera | Общие вопросы Delphi | 23 | 28.04.2008 20:36 |
Посылаем адресс компонента в dll | Altera | Общие вопросы Delphi | 0 | 27.04.2008 05:50 |