28.03.2006, 17:44 | #1 |
Участник
|
Не могу понять почему
Добрый день! вопрос такой.
есть некая 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; Почему ? Заранее благодарен |
|
|
|