стoлкнулся с очень странным поведением: есть библиотека устройства, которая прекрасно работает с с++ примером. Делаю то же самое из фпц - и на 4-ый вызов функции из сишной либы, вылетает ексепшн: Invalid floating point operation. Все уже по 150 раз перепроверил и методы вызова и прочее. Ощушение, что фпц какие то свои вещи в реал тайме "навешивает" на эту либу.
Пробовал даже связку: фпц(вылетает с 4-ого раза) приложение/ с++ (ок) приложение <-> с++ библиотека <-> c++ библиотека устройства.
может посоветуете чтонить? компилер и лазарь последние, кернел 2.16.17
Функция вызывается та же самая, в цикле, с теми же параметрами. В сишнике все работает бесконечно.
работа с с++ либой.
Модератор: Модераторы
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Код: Выделить всё
program Project1;
{$mode delphi}{$H+}
{$linklib libwdapi811.so}
uses
{$IFDEF UNIX}{IFDEF UseCThreads}
cthreads, {$ENDIF} {$ENDIF}
Classes,
SysUtils
{ add your units here };
const
Lib = 'libxxx.so';
type
TSensorInfo = packed record
SensorVersion : Byte;
ImageWidth : Word;
ImageHeight : Word;
end;
function STInitialize(hFingerPresent, hFingerLeft : Pointer) : Integer; stdcall; external Lib;
function STOpen(pSensorDescr : Pointer) : Integer; stdcall; external Lib;
function STAuthentify(AlgoID, PassPhrase : PChar) : Integer; stdcall; external Lib;
function STSetWindow(X0, Y0, X, Y, IncX, IncY : Integer) : Integer; stdcall; external Lib;
function STGrabBestSett(Buffer : PChar; BufferSize : LongInt) : Integer; stdcall; external Lib;
function STTerminate() : Integer; stdcall; external Lib;
function STClose() : Integer; stdcall; external Lib;
var PassPhrase : array[0..16] of Char;
SensorInfo : TSensorInfo;
XMAX, YMAX : Integer;
I : Integer;
image : PChar;
begin
XMAX := 256; YMAX := 360;
GetMem(image, XMAX*YMAX);
while True do
begin
I := STInitialize(nil,nil);
I := STAuthentify(Pchar('XXXXXXXXXXXXXXXXX'), @PassPhrase[0]);
I := STOpen(@SensorInfo);
I := STSetWindow(0, 0, XMAX, YMAX, 1, 1);
while true do
begin
I := STGrabBestSett(image, XMAX*YMAX);
if I <> -25 then Break;
Sleep(1000);
end;
I := STClose();
I := STTerminate();
end;
FreeMem(image, XMAX*YMAX);
end.
exception HA STGrabBestSett
да код то рабочий
ev: просьба относиться уважительно к тем, кто пытается помогать - оформлять код в специальные теги
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
