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

Вниз

Можно ли экспортировать из 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.036 c
1-1120775754
A013B
2005-07-08 02:35
2005.07.25
String в тип PChar


9-1113249164
Ford
2005-04-11 23:52
2005.07.25
Примеры GLScene


14-1120442151
X9
2005-07-04 05:55
2005.07.25
Тринистор или тиристор


9-1113245655
Ford
2005-04-11 22:54
2005.07.25
Опрос


6-1113810149
cherrex
2005-04-18 11:42
2005.07.25
TIdFTP