Главная страница
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.047 c
1-1131449717
Lera
2005-11-08 14:35
2005.12.11
Закрытие формы.


2-1132920391
De1uxe
2005-11-25 15:06
2005.12.11
Дробные числа в Эдите


1-1131611361
JurMan
2005-11-10 11:29
2005.12.11
Как обратиться к СОМ-порту?


3-1130399234
Nikola62
2005-10-27 11:47
2005.12.11
Постраничный запрос


2-1132721288
Васяня
2005-11-23 07:48
2005.12.11
ADO + DSN (Alias)