Текущий архив: 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.48 MB
Время: 0.01 c