Infrarot-Kamera VarioCAM und das SDK

Das Software Development Kit (SDK) zur Infrarot-Kamera VarioCAM der Firma Infratec GmbHH ist vorrangig für Delphi-Entwickler geschrieben. Hier wird die noch kostenlose Version 2 vom Oktober 2004 verwendet.

Ich verwendete hier Microsoft Visual Studio 6.0 mit C++. Mit neueren C-Compilern geht's aber auch.

Statisches Binden (macht weniger Arbeit)

Weil eine .LIB-Datei fehlt, lässt sich die zu verwendende IRBGRAB.DLL nicht in Visual C statisch einbinden, und man hat eine Menge Arbeit mit GetProcAddress()-Aufrufen. Die mitgelieferte Header-Datei IRBGRAB.H enthält keine _stdcall-Aufrufkonventionsfestlegung und ist damit in Projekten mit _cdecl- oder _fastcall-Aufrufkonvention nicht verwendbar (d.h. das Programm wird korrekt compiliert, stürzt aber „rätselhafterweise“ irgendwo ab).

Hier die notwendigen Dateien für statisches Binden zur IRBGRAB.DLL:

Außerdem hilft _declspec(dllimport), Kode zu sparen.
Die Verknüpfungen zur DLL sind allesamt nach Nummer, nicht nach Name. Ich habe die Verknüpfung nach Name nicht hinbekommen (Fehler in LIB.EXE?), und die resultierende Kodegröße ist wiederum geringer. Allerdings darf hierbei Infratec die Ordinalzahlen nicht ändern!
Richtige Lösung: Da frage ich mich die ganze Zeit, warum der MSVC-Linker nicht gleich DLLs linken kann, anstelle diese umständlichen LIB-Dateien zu handhaben.

Hat man eine .EXE compiliert, die statisch mit IRBGRAB.DLL verbunden ist, muss diese DLL:

Die wenigsten Probleme bereitet die erste Lösung. Zu beachten ist, dass die davon abhängigen DLLs VARIOCAM.DLL und C3POWER.DLL sich ebenfalls im o.a. Verzeichnissen befinden müssen! Die Datei MSVCP60.DLL befindet sich oftmals schon im Windows-Verzeichnis.

Der Pfad zur IRBGRAB.INI

Um die .INI-Datei gleich neben die .EXE legen zu können, ist folgende Vorgehensweise zweckmäßig und Kode sparend:
#include <shlwapi.h>
#define elemof(x) (sizeof(x)/sizeof(*(x)))
...
 char IniFileName[MAX_PATH], *p;
 GetModuleFileNameA(0, IniFileName, elemof(IniFileName));
 p = PathFindFileNameA(IniFileName);
 lstrcpynA(p, IniFileName+elemof(IniFileName)-p, "IrbGrab.ini");
...
Dieses Kode-Schnipsel ist extra auf ANSI getrimmt, weil der INI-Dateiname nicht in Unicode übergeben werden kann. Damit sind Probleme vorprogrammiert, wenn der Verzeichnispfad Sonderzeichen enthält, die nicht Bestandteil der aktuellen OEM-Kodeseite sind (bspw. chinesische Zeichen im deutschen Windows). Bedanken Sie sich für diesen Bug bei den Entwickern bei Infratec.

Ein einfaches Beispielprogramm

Das mitgelieferte Demo-Programm wurde für die permanente Bildwiedergabe in doppelter Größe per Timer umgestrickt. Dazu wurde eine Farbpalette geladen, die sich zurzeit fest an folgender Stelle befinden muss: "c:/Programme/IRBIS_professional_2.2/col/ThvVario.col"

Das Programm ist keinesfalls ausgereift! Es ist eine Lügendetektor-Scherzanwendung, bei der der Fragesteller unauffällig am Mausrad die angezeigte Gesichtstemperatur modifizieren kann.


Bildschirm-Schnappschuss. Ähnlichkeiten mit dem Programm Irbis-Online sind beabsichtigt

Das Programm zum Download und zur Einsicht.


Henrik Haftmann, 130211