![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Совместимость DLL для delphi и С++
Ega23 © (2005-02-08 11:47:00)
library MyDLL;
uses
.....
function AAA(Param1:Cardinal =0):Cardinal; StdCall;
....
exports
AAA name 'AAA';
Под C++ значение по-умолчанию пройдёт?
Digitman (2005-02-08 13:03:00) [1]
> Ega23
см.
> MBo © (08.02.05 12:52) [9]
и ничего удивительного здесь нет.
любой компилятор в общем случае генерирует код, в рез-те исполнения которого передаются ВСЕ без исключения факт.параметры .. др.вопрос что если некий параметр имеет зн-е по дифолту и в вызове опущен, то компилятор, ИМЕЯ ПРОТОТИП, сгенерирует код, передающий этот параметр со значением, указанным по дифолту
Ega23 (2005-02-08 12:57:00) [2]Если существует стандарт на передачу параметров по умолчанию, то это неважно. К сожалению, о таком соглашении я не знаю.
Очепятка. StdCall
MBo (2005-02-08 12:52:00) [3]>Тут как раз обратная ситуация.
Если существует стандарт на передачу параметров по умолчанию, то это неважно. К сожалению, о таком соглашении я не знаю.
Однако, например, такая функция из DLL с прототипом из .h-файла:
PXL_API
PimMegaStartPreview(IN HANDLE hImager, // Imager object handle
IN LPSTR title="PL1394 Camera Preview", //window title
IN U32 style=WS_OVERLAPPEDWINDOW|WS_VISIBLE,//style
IN U32 x=0, //left
IN U32 y=0, //top
IN U32 width=-1, //width
IN U32 height=-1, //height
IN HWND parent=NULL, //handle to parent window
IN U32 nId=0, //child window id
IN int PreviewDataThreadPriority=
THREAD_PRIORITY_BELOW_NORMAL, //preview window's data thread priority
IN int PreviewDrawThreadPriority=
THREAD_PRIORITY_BELOW_NORMAL); //preview window's draw thread priority
работает в таком виде:
function PimMegaStartPreview(hImager: THandle;
strTitle: PChar = nil;
Style: Integer = WS_OVERLAPPEDWINDOW or WS_VISIBLE;
lLeft: Integer = 0;
lTop: Integer = 0;
lWidth: Integer = -1;
lHeight: Integer = -1;
lParent: Integer = 0;
lChildId: Integer = 0;
lPreviewDataThreadPriority: Integer = THREAD_PRIORITY_BELOW_NORMAL;
lPreviewDrawThreadPriority: Integer = THREAD_PRIORITY_BELOW_NORMAL
): PXL_RETURN_CODE; stdcall;
Ega23 (2005-02-08 12:51:00) [4]Не забудь поставить директиву cdecl.
В рамках нашей команды StrdCall принят за правило.
Игорь Шевченко (2005-02-08 12:43:00) [5]Параметры по умолчанию нужны только во время компиляции, чтобы компилятор при вызове фукнции мог подставить корректные аргументы. И все.
Eraser (2005-02-08 12:42:00) [6]Не забудь поставить директиву cdecl.
Ega23 (2005-02-08 12:39:00) [7]Сишные DLL с параметрами по умолчанию используются в Дельфи нормально.
Тут как раз обратная ситуация. На 95% DLL будет под Делфи использоваться, но вероятность использования её под С++ всё-таки есть...
Digitman (2005-02-08 12:22:00) [8]
> Понял
радует.
MBo (2005-02-08 12:21:00) [9]Сишные DLL с параметрами по умолчанию используются в Дельфи нормально.
Ega23 (2005-02-08 12:18:00) [10]Т.е. так нельзя, надо в явном виде параметр указывать...
Понял.
Digitman (2005-02-08 12:15:00) [11]
> Под C++ значение по-умолчанию пройдёт?
как же оно "пройдет", если генерация кода для случаев с дифолт-параметрами - прерогатива конкретногокомпилятора ?