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

Вниз

Можно ли экспортировать из dll - overload процедуры   Найти похожие ветки 

 
Slaga ©   (2005-07-05 11:08) [0]

Можно ли экспортировать из dll - overload процедуры/функции ?


 
Игорь Шевченко ©   (2005-07-05 11:20) [1]

Нельзя.

dll написать можно, разумеется, но в списке экспортируемых функций перегруженный функции будут с одинаковым именем, и как их отличать...


 
Игорь Шевченко ©   (2005-07-05 11:26) [2]

Вот такой код вполне себе компилируется:

library Dll;

uses
 ShareMem,
 DllMain in "DllMain.pas";

{$R *.RES}

exports
 MyAddFunc (A,B: Integer),
 MyAddFunc (A,B: Double);
 
begin
end.


unit DllMain;

interface

function MyAddFunc(A,B: Integer): string; overload;
function MyAddFunc(A,B: Double): string; overload;

implementation
uses
 SysUtils;

function MyAddFunc(A,B: Integer): string;
begin
 Result := IntToStr(A + B);
end;

function MyAddFunc(A,B: Double): string;
begin
 Result := FloatToStr(A + B);
end;

end.


 
Alex Konshin ©   (2005-07-05 11:28) [3]

По номерам можно отличать.


 
Игорь Шевченко ©   (2005-07-05 11:31) [4]

Alex Konshin ©   (05.07.05 11:28) [3]

Алекс, спасибо. Твой пост привел  к тому, что я прочитал help :)

А там английским по белому написано, что

When you export an overloaded function or procedure from a DLL, you must specify its parameter list in the exports clause. For example,

exports

 Divide(X, Y: Integer) name "Divide_Ints",
 Divide(X, Y: Real) name "Divide_Reals";

Do not include index specifiers in entries for overloaded routines.

Век живи, век учись :)

В посте [1] слово "нельзя" прошу считать недействительным.


 
evvcom ©   (2005-07-05 11:31) [5]


> Slaga ©   (05.07.05 11:08)

Зачем тебе лишняя путаница?


 
Anatoly Podgoretsky ©   (2005-07-05 11:38) [6]

Слово красивое OVERLOAD


 
slaga ©   (2005-07-05 11:42) [7]

Все большое спасибо, это то что мне нужно :)


 
slaga ©   (2005-07-05 11:51) [8]

Зачем мне Overload ?
А что лучше использовать Variant ?

У меня в DLL процедура типа:

procedure prGetFieldValueByKeyFieldValueIntStr(dsDataSet: TOracleDataSet; sFieldName, sKeyFieldName: String;
               vKeyFieldValue: integer; var vValue: String; sResMessage: String); Overload; StdCall;


И в ней параметры отмеченые жирным могут иметь разные типы при разных вызовах процедуры, я решил что с Overload будет правильно реализовать такой случай.

Подскажите более правильный вариант...


 
Игорь Шевченко ©   (2005-07-05 11:52) [9]


> prGetFieldValueByKeyFieldValueIntStr


Переведи! (с)


 
Digitman ©   (2005-07-05 11:56) [10]

если планируется использование ДЛЛ в хост-приложениях, написанных искл-но в Делфи (или в ВСВ), то можно и Variant"ом воспользоваться

судя по StdCall у тебя и ВСВ-приложение будет фигурировать в кач-ве вызывающей среды ? или соглашение это ты от фонаря проставил, мол, так в примерах пишут, значит, мол, так надо ?)


 
slaga ©   (2005-07-05 11:58) [11]

Получить значение поля по значению ключевого поля.

{
if dsDataSet.Locate(sKeyFieldName, vKeyFieldValue, []) then
 if not VarIsNull(dsDataSet.FieldByName(sFieldName).AsVariant) then
  vValue := dsDataSet.FieldByName(sFieldName).AsString;

}


 
slaga ©   (2005-07-05 11:59) [12]


> Digitman ©

Ну, чесно говоря, потому что в примерах ставят, а вообще пока планируется использовать эту длл только их дельфийских приложений.


 
Digitman ©   (2005-07-05 12:02) [13]


> чесно говоря, потому что в примерах ставят


примеры вообще-то существуют не для бездумного сдирания, а для детального анализа, что там почему и зачем ...


> планируется использовать эту длл только их дельфийских приложений


тогда убирай stdcall и используй для передачи параметра/результата тип [ole]variant ... это будет просто, удобно, понятно и со вкусом


 
slaga ©   (2005-07-05 12:10) [14]


> Digitman ©

Хорошо, спасибо, так и сделал.


 
Digitman ©   (2005-07-05 12:18) [15]


> slaga ©   (05.07.05 12:10) [14]


и не забудь про возможную необходимость и особенности использования ShareMem



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

Форум: "Основная";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.035 c
8-1111679434
Friend
2005-03-24 18:50
2005.07.25
Работа с графикой


1-1120656312
Mameluke
2005-07-06 17:25
2005.07.25
Подключение DLL


14-1120135115
Магнум
2005-06-30 16:38
2005.07.25
Вопрос по HTML


4-1117344959
NikNet
2005-05-29 09:35
2005.07.25
Как получить адресс строкий? Const MyStr:String = Hello! ;


1-1120755837
Kolan
2005-07-07 21:03
2005.07.25
Текст на кнопках TToolBar справа от картинок. Как?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский