Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

Overload в DLL   Найти похожие ветки 

 
Некто Аполло   (2005-11-10 11:50) [0]

Здраствуйте многоуважаемые.
У меня проблема с перегрузкой функций в 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".

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


 
Lamer@fools.ua ©   (2005-11-10 11:58) [1]

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

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


 
TUser ©   (2005-11-10 12:02) [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;


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

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



Страницы: 1 вся ветка

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.026 c
2-1132814923
tytus
2005-11-24 09:48
2005.12.11
Снова Paskal


1-1131797065
zxc
2005-11-12 15:04
2005.12.11
одновременно avi показывать и рисовать


3-1130399776
Slider007
2005-10-27 11:56
2005.12.11
Проблема с подключением к Firebird Imbedded 1.5


1-1132124995
DEMs
2005-11-16 10:09
2005.12.11
Компонент TVirtualStringTree


14-1132258063
Jakudza
2005-11-17 23:07
2005.12.11
Установка Rx7