Не могу понять почему
Добрый день! вопрос такой.
есть некая dll-ка которую
static void Job1(Args _args)
{
boolean ret ;
DLL MyDll = new DLL('XXX.DLL');
DLLFunction fOpenComm = new DLLFunction(InetDll, 'OpenComm');
;
fOpenComm.returns(ExtTypes::Byte);
fOpenComm.arg(ExtTypes::dWord, ExtTypes::dWord, ExtTypes::Byte);
ret = fOpenComm.call(3,1,0);
}
.....................описание функции DLL.....+++...................
// Функция:Открыть СОМ порт
// Параметры:
// int nCommPort - целое, номер СОМ-порта, 1..16
// int nCommSpeed - целое, скорость СОМ - порта, 1..5 (1 - 115200, 2 - 57600, 3 - 38400, 4 - 19200, 5 - 9600)
// BOOL bIsIrDA
// Возвращаемое значание:
// TRUE - если СОМ порт успешно открыт
// FALSE - иначе.
__declspec(dllimport) BOOL __cdecl OpenComm(int nCommPort, int nCommSpeed, BOOL bIsIrDA);
.....................описание функции DLL...---.....................
при выполнении выкидывает ошибку
Значение регистра ESP не было сохранено при вызове функции "OpenComm" в библиотеке DLL "d:\winnt\system32\XXX.dll". Причиной может являться вызов функции DLL, которая объявлена с неверным числом аргументов.
есть пример на дельфях --- всё работает!
function TCipherIO.OpenComm(CommPort: Integer; IsCradle: Boolean) : Boolean;
begin
FCommPort := CommPort;
FIsCradle := IsCradle; boolean
FCommSpeed := CommSpeed;
Result := _OpenComm(FCommPort, FCommSpeed, FIsCradle);
{$IFNDEF USECHECK}
FActive := Result;
{$ENDIF USECHECK}
end;
Почему ? Заранее благодарен
|