![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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)
> Что сделать, что бы все работало нормально?
Почитать стандартную справку. Там написано, что в этом случае нужно экспортировать функции под разными именами.