Показать сообщение отдельно
Старый 28.03.2006, 17:44   #1  
Hal is offline
Hal
Участник
Axapta Retail User
 
9 / 10 (1) +
Регистрация: 05.11.2004
Адрес: Москва
Не могу понять почему
Добрый день! вопрос такой.
есть некая 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;


Почему ? Заранее благодарен