Ich verwendete hier Microsoft Visual Studio 6.0 mit C++. Mit neueren C-Compilern geht's aber auch.
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:
_declspec(dllimport), Kode zu sparen.
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.
- Ein DLL-Projekt erstellen
- Eine Datei
irbgrab.cschreiben, die eine FunktionXexportiert:void X() {}(_declspec(dllexport)ist nicht erforderlich!)- Eine Moduldefinitionsdatei
irbgrab.defschreiben, die unterEXPORTSlauter Zeilen der Formexportname=Xenthält- übersetzen, entstehende .LIB-Datei verwenden, entstehende .DLL-Datei wegwerfen
Hat man eine .EXE compiliert, die statisch mit IRBGRAB.DLL verbunden ist, muss diese DLL:
#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.
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