Hallo Brechi!
Ich hab nach deinem Posting gestern Nacht dann doch noch mal beim kanadischen (?; zumindest englischsprachiger Raum) Hersteller-Support nachgefragt. Wollte mir dein Paket mal anschauen. Heut Morgen hab ich dann auch eine Kopie der UniAPI erhalten. Macht auf jeden Fall einen deutlich ausgereifteren/umfangreicheren Eindruck als die reine PvAPI. Da ich selbst nach einem Kamera-Firmwareupdate keine großen Verbesserungen hatte, wollte ich es jetzt mal damit versuchen.
Hab mich nun eine Weile hingesetzt und lese mich in die Header und Beispiele ein. Ehrlich gesagt hats mich dann einen Moment geerdet. Die Headerfiles ergehen sich ja geradezu in Typdeklarationen. Hat mich einen Moment gekostet, um zu sehen, daß es in erster Linie wohl um Plattformkompatibilität geht. Die meisten Typen kann man scheinbar gut auf Standards rückführen...
Kann es sein, daß die Kameras nur über ihr
Handle identifiziert werden? Bislang hab ich noch keine entsprechende Kamera-Liste entdeckt, wie bei der PvAPI.
Einige Funktionen hab ich schon importiert und die Typen aus den endlosen Querreferenzen auf Standards zurückgeführt. Muss jetzt nur bei dem InfoString noch mal bei.
Delphi-Quellcode:
Function UCC_Init: Int64; stdcall; external 'UniControl.DLL';
Function UCC_Release: Int64; stdcall; external 'UniControl.DLL';
Function UCC_GetCameras ( Var pnSize : UInt32; Out vecIds : UInt32) : Int64; stdcall; external 'UniControl.DLL';
Function UCC_OpenCamera (CamId : UInt32; lSpeedLimit : Int32) : Int64; stdcall; external 'UniControl.DLL';
Function UCC_CloseCamera (CamId : UInt32) : Int64; stdcall; external 'UniControl.DLL';
Function UCC_GetCameraInfoString (CamId : UInt32; nId : UInt32; Out pszInfoString : PAnsiChar; Var pLength : UInt32) : Int64; stdcall; external 'UniControl.DLL';
Offensichtlich bewege ich mich schon mal in die Nähe der Kamera. Aber da geht es Morgen weiter. Den Kindern gehts grad nicht so gut; sind kurze Nächte...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var CamID : Uint32;
aCount : Uint32;
aVendor : PAnsiChar;
aModel : PAnsiChar;
aModelLength : Uint32;
begin
aCount := 64;
aVendor := ' ';
aModel := ' ';
Memo1.Lines.Add ('Initialise : ' + IntToStr(UCC_Init));
Memo1.Lines.Add ('');
Memo1.Lines.Add ('Get cameras : ' + IntToStr (UCC_GetCameras (aCount, CamID)));
Memo1.Lines.Add ('Camera counts : ' + IntToStr (aCount));
Memo1.Lines.Add ('CamID : ' + IntToStr (CamID));
Memo1.Lines.Add ('');
Memo1.Lines.Add ('Camera open : ' + IntToStr (UCC_OpenCamera (CamID, -1)));
aModelLength := SizeOf (aModel);
UCC_GetCameraInfoString (CamID, 0, aModel, aModelLength);
Memo1.Lines.Add ('Model : ' + aModel);
Memo1.Lines.Add ('Camera close : ' + IntToStr (UCC_CloseCamera (CamID)));
Memo1.Lines.Add ('Uninitialise : ' + IntToStr(UCC_Release));
Memo1.Lines.Add ('');
end;
Werde dies Wochenende sicherlich noch mal auf dich zurückkommen. Ich hab schon ein paar Funktionen des UniAPI entdeckt, die sich vielversprechend anhören, aber einige Fallstricke bieten könnten.
Jan