Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.046 c
1-1131624295
ASScef
2005-11-10 15:04
2005.12.11
Рисование на Canvas


14-1132583518
ArtemESC
2005-11-21 17:31
2005.12.11
Как програмно выключить или перезагрузить компьютер?


2-1132619516
Дева
2005-11-22 03:31
2005.12.11
об Access


3-1130411409
diwww
2005-10-27 15:10
2005.12.11
Получить позицию первой выводимой записи в DBGrid-е


14-1132357774
Nous Mellon_
2005-11-19 02:49
2005.12.11
Вопрос по настройке прав





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский