![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Есть PROJECT.PAS который содержит Form1 и прицепляет DLL. В DLL-файле нужно произвести создание на Form1 некоего графического элемента (например, Label и Button). При попытке компилировать DLL файл пишет, что Unknown identifier Form1. Что нужно добавить в код чтобы это исправить?
Текст Project.PAS: Код:
...
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure Starter();
stdcall; external 'initial.dll';
procedure TForm1.FormCreate(Sender: TObject);
begin
Starter;
end;
end.Текст DLL-файла: Код:
library initial;
uses
SysUtils, Classes, Dialogs, StdCtrls;
{$R *.res}
procedure Starter(); stdcall;
var
label_tmp : TLabel;
begin
ShowMessage('dll');
label_tmp := TLabel.Create(nil);
label_tmp.parent := Form1;
label_tmp.Visible := True;
label_tmp.Left := 100;
label_tmp.Top := 100;
label_tmp.Transparent := True;
label_tmp.Caption := 'text';
end;
exports Starter;
begin
end.Последний раз редактировалось smart_man, 08.07.2009 в 18:23. |
|
#2
|
||||
|
||||
|
А откуда он знает про этот Form1? Попробуй форму через параметр передавать...
|
|
#3
|
|||
|
|||
|
Сама идея понятна. Проблема в том как это выразить в коде =)
Может ошибочна сама идея пытаться делать TLabel.Create из DLL... Последний раз редактировалось smart_man, 08.07.2009 в 18:50. |
|
#4
|
||||
|
||||
|
В dll:
Код:
//procedure Starter(); stdcall; procedure Starter(var Form1: TForm); stdcall; Код:
//procedure Starter(); procedure Starter(var Form1: TForm); stdcall; external 'initial.dll'; //Starter(); Starter(Form1); Не забудь в dll добавить в uses модуть Forms С тебя +++ |
|
#5
|
||||
|
||||
|
И, вдгонку, жёсткое подключение к dll лучше заменить на LoadLibrary, так правильнее, и проверку можно норм оформить...
|
|
#6
|
|||
|
|||
|
Так не получается. Несоответствие между:
Код:
var Form1: TForm1; и Код:
Starter(var Form1: TForm); Возможно тут надо как-то указатель использовать... Последний раз редактировалось smart_man, 08.07.2009 в 19:24. |