Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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
procedure
show(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 и в хост-приложении в полное и точное соответствие (единое число и тип параметров, единое соглашение о вызове и т.д. и т.п.)


Наверх

Титульная страница Поиск, карта сайта Написать письмо