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

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

Overload в DLL [D7, WinXP]


Некто Аполло ©   (2005-11-10 11:50:00) 

Здраствуйте многоуважаемые.
У меня проблема с перегрузкой функций в DLL. Вот код:

Библиотека
library XXX;

uses
 SysUtils, Dialogs,
 Classes;
{$R *.res}

procedure XXX(FileName: PChar); overload;
begin
 ShowMessage('XXX 1');
end;

procedure XXX(FileName: PChar; StrBreak: PChar); overload;
begin
 ShowMessage('XXX 2');
end;

procedure XXX(FileName: PChar; StrCountBreak: integer); overload;
begin
 ShowMessage('XXX 3');
end;

exports
 XXX (FileName: PChar),
 XXX (FileName: PChar; StrBreak: PChar),
 XXX (FileName: PChar; StrCountBreak: integer);

begin
end.

--------------------------------------------------------
В самой программе
unit unDLL;

interface

procedure XXX(FileName: PChar); overload;
procedure XXX(FileName: PChar; StrBreak: PChar); overload;
procedure XXX(FileName: PChar; StrCountBreak: integer); overload;

implementation
procedure XXX(FileName: PChar); overload; external 'XXX.dll';
procedure XXX(FileName: PChar; StrBreak: PChar); overload; external 'XXX.dll';
procedure XXX(FileName: PChar; StrCountBreak: integer); overload; external 'XXX.dll';

end.


При компиляции никаких ошибок не выдает.
При вызове в программе процедуры XXX с любым набором параметров, появляется сообщение 'XXX 1'.
Если в разделе exportsпервой поставить строку XXX (FileName: PChar; StrBreak: PChar)то независимо от параметров будет  появляться сообщение 'XXX 2'.

Что сделать, что бы все работало нормально?
(Хотелось бы чтобы процедуры имели одно имя)


Некто Аполло   (2005-11-10 12:18:00) [1]

-->TUser
Спасибо огромное. Про nameпри экспорте знал, а про external ... name 'xxx1'...не знал. В справке, только сейчас нашел.
Еще раз спасибо


TUser   (2005-11-10 12:02:00) [2]

В какой версии Delphi нормально компилируется такой код
library XXX;
...
procedure XXX
??

> Что сделать, что бы все работало нормально?

Надо при экспорте написать
export
 XXX () name 'xxx1';
 XXX (...) name 'xxx2'
и т.д.

В основной программе
procedure XXX(FileName: PChar); overload; external 'Project2.dll' name 'XXX1';
и т.д.

и вызывать как ты хочешь
procedure TForm1.Button1Click(Sender: TObject);
begin
 XXX('aa');
 xxx ('aa','bb');
 xxx ('aa',10);
end;


Lamer@fools.ua   (2005-11-10 11:58:00) [3]

>> Некто Аполло   (10.11.05 11:50)

> Что сделать, что бы все работало нормально?
Почитать стандартную справку. Там написано, что в этом случае нужно экспортировать функции под разными именами.


Наверх

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