![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли экспортировать из dll - overload процедуры [D6, WinXP]
Slaga © (2005-07-05 11:08:00)Можно ли экспортировать из dll- overloadпроцедуры/функции ?
Digitman (2005-07-05 12:18:00) [1]
> slaga © (05.07.05 12:10) [14]
и не забудь про возможную необходимость и особенности использования ShareMem
slaga (2005-07-05 12:10:00) [2]
> Digitman ©
Хорошо, спасибо, так и сделал.
Digitman (2005-07-05 12:02:00) [3]
> чесно говоря, потому что в примерах ставят
примеры вообще-то существуют не для бездумного сдирания, а для детального анализа, что там почему и зачем ...
> планируется использовать эту длл только их дельфийских приложений
тогда убирай stdcall и используй для передачи параметра/результата тип [ole]variant ... это будет просто, удобно, понятно и со вкусом
slaga (2005-07-05 11:59:00) [4]
> Digitman ©
Ну, чесно говоря, потому что в примерах ставят, а вообще пока планируется использовать эту длл только их дельфийских приложений.
slaga (2005-07-05 11:58:00) [5]Получить значение поля по значению ключевого поля.
{
if dsDataSet.Locate(sKeyFieldName, vKeyFieldValue, []) then
if not VarIsNull(dsDataSet.FieldByName(sFieldName).AsVariant) then
vValue := dsDataSet.FieldByName(sFieldName).AsString;
}
Digitman (2005-07-05 11:56:00) [6]если планируется использование ДЛЛ в хост-приложениях, написанных искл-но в Делфи (или в ВСВ), то можно и Variant'ом воспользоваться
судя по StdCall у тебя и ВСВ-приложение будет фигурировать в кач-ве вызывающей среды ? или соглашение это ты от фонаря проставил, мол, так в примерах пишут, значит, мол, так надо ?)
Игорь Шевченко (2005-07-05 11:52:00) [7]
> prGetFieldValueByKeyFieldValueIntStr
Переведи! (с)
slaga (2005-07-05 11:51:00) [8]Зачем мне Overload ?
А что лучше использовать Variant ?
У меня в DLL процедура типа:
procedure prGetFieldValueByKeyFieldValueIntStr(dsDataSet: TOracleDataSet; sFieldName, sKeyFieldName: String;
vKeyFieldValue: integer; var vValue: String; sResMessage: String); Overload; StdCall;
И в ней параметры отмеченые жирным могут иметь разные типы при разных вызовах процедуры, я решил что с Overload будет правильно реализовать такой случай.
Подскажите более правильный вариант...
slaga (2005-07-05 11:42:00) [9]Все большое спасибо, это то что мне нужно :)
Anatoly Podgoretsky (2005-07-05 11:38:00) [10]Слово красивое OVERLOAD
Игорь Шевченко (2005-07-05 11:31:00) [11]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:00) [12]
> Slaga © (05.07.05 11:08)
Зачем тебе лишняя путаница?
Alex Konshin (2005-07-05 11:28:00) [13]По номерам можно отличать.
Игорь Шевченко (2005-07-05 11:26:00) [14]Вот такой код вполне себе компилируется:
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.
Игорь Шевченко (2005-07-05 11:20:00) [15]Нельзя.
dll написать можно, разумеется, но в списке экспортируемых функций перегруженный функции будут с одинаковым именем, и как их отличать...