![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DLL [D6, Win2k]
BALU1111 © (2004-02-11 12:37:00)Помогите плиз, может я что-то неправильно делаю, но вопрос такой. Создал DLL, на ней форма, показывается модально процедурой Show, экспортирую ее. В главном приложении подключаю эту DLL, импортирую процедуру. При нажатии кнопки на форме, должна появиться форма из DLL:
procedurebutton1click(??);
begin
Show(self).
end;
На ошибку в название процедуры нажатия кнопки прошу не обращать внимания, пишу по памяти.
Так при компиляции программы, останавливается на строке Show(self) и пишет ошибку Too many parametres Что делать?
BALU1111 (2004-02-11 13:44:00) [1]> Digitman © (11.02.04 13:23) [8]
На самом деле мозгами шевелю, если бы не шевелил у меня бы вообще ничего не получалось бы. Метод такой сдувать все с книжки, а потом разбираться как все работает при условии выполнения.
BiN (2004-02-11 13:30:00) [2]>BALU1111 ©
Рекомендую не использовть в качестве параметра TComponent, реализация которого может измениться в след. версии Дельфи, что может привести к AV. Постарайся обойтись хэндлами окон
Digitman (2004-02-11 13:23:00) [3]
> всю эту процедуру один в один списал с книжки
когда сдуваешь с книжки. нужно все же хоть чуть чуть мозгами шевелить
у твоей формы в хост-приложении есть метод Show (без параметров), не думаю что ты о нем не слыхал
так почему бы сразу не объявить, к примеру :
procedure Show MyTestForm(AOwner: TComponent); external 'xxx.dll' name 'Show';
?
навряд ли где-то в VCL и/или программе твоей найдется (хотя бы в области видимости по умолчанию) еще один идентификатор 'Show MyTestForm'
Digitman (2004-02-11 13:18:00) [4]
> BALU1111 © (11.02.04 13:02) [3]
плохая книга, если в ней нет ни слова о том, что имена собственных идентификаторов должны выбираться таким образом, чтобы они по возможности не совпадали с идентификаторами в составе других программных единиц, дабы сразу исключить неоднозначность и не зарабатывать потом себе геморрой с разрешением неоднозначности имен
BALU1111 (2004-02-11 13:13:00) [5]> BiN © (11.02.04 13:05) [4]
Да вот иногда наступают такие моменты, но в ней есть много чего интересного.
А может есть где примерчик?
AKul (2004-02-11 13:07:00) [6]
> BALU1111 © (11.02.04 13:02) [3]
Используйте:
Unit1.Show(Self);
Где Unit1 - имя модуля, в котором объявлена Show (Даже если в этом же самом).
BiN (2004-02-11 13:05:00) [7]сожги ее
BALU1111 (2004-02-11 13:02:00) [8]implementation
procedureshow(AOwner: TComponent);
external'xxx.dll';
А всю эту процедуру один в один списал с книжки, там-то и был указан параметр а-ля Self.
Digitman (2004-02-11 12:45:00) [9]кр.того формат вызова процедуры и ее прототип в вызывающем коде должны совпадать
если
type
TShowForm = procedure; //нет параметров !
var
Show: TShowForm;
то какого ж шута ты пишешь
Show(какой-то там непонятного назначения параметр а-ля Self)
?
Digitman (2004-02-11 12:41:00) [10]
> Что делать?
приводить декларацию процедуры "Show" в DLL и в хост-приложении в полное и точное соответствие (единое число и тип параметров, единое соглашение о вызове и т.д. и т.п.)