![]() |
Event aus c++ DLL auswerten
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo an alle,
ich möchte aus einer Fremd-DLL, die in C++ geschrieben ist, ein Event auswerten. Ich habe ein in C++ geschriebenes Beispiel, dass mir aber nicht die nötige Erleuchtung bringt, das Ganze nach Delphi umzusetzen. In der angehängten TXT-Datei sind sowohl ausführlichere Auszüge der Header- als auch der CPP-Datei. Außerdem habe ich den Teil meiner bisherigen kläglichen Bemühungen in Delphi dort eingetragen. Hier die kürzere Fassung: H-File:
Code:
CPP-File:
typedef void (I1_CALLING_CONVENTION *FPtr_I1_DeviceEventHandler)(I1_DeviceHandle devHndl, I1_DeviceEvent event, void *context);
void MyDeviceEventFunction(I1_DeviceHandle devHndl, I1_DeviceEvent event, void *context) FPtr_I1_DeviceEventHandler I1_RegisterDeviceEventHandler(FPtr_I1_DeviceEventHandler handler, void *context); typedef FPtr_I1_DeviceEventHandler (I1_CALLING_CONVENTION *FPtr_I1_RegisterDeviceEventHandler)(FPtr_I1_DeviceEventHandler, void*);
Code:
void MyDeviceEventFunction(I1_DeviceHandle devHndl, I1_DeviceEvent event, void *refCon);
void DeviceEventHandlerDemo(); // This function is called if an event happens void MyDeviceEventFunction(I1_DeviceHandle devHndl, I1_DeviceEvent event, void *refCon) { // increase our event counter int *eventCounter = static_cast<int*>(refCon); *eventCounter += 1; std::cout << "Event #" << *eventCounter; switch(event) { case eI1ProButtonPressed: std::cout << " 'Button pressed' 0x" << std::hex << devHndl << std::dec << std::endl; break; case eI1ProScanReadyToMove:std::cout << " 'Ready to move' 0x" << std::hex << devHndl << std::dec << std::endl; break; case eI1ProLampRestore: std::cout << " 'Lamp restore' 0x" << std::hex << devHndl << std::dec << std::endl; break; case eI1ProArrival: std::cout << " 'Device attached' 0x" << std::hex << devHndl << std::dec << std::endl; break; case eI1ProDeparture: std::cout << " 'Device removed' 0x" << std::hex << devHndl << std::dec << std::endl; break; } } // This function demonstrates the device event handler usage void DeviceEventHandlerDemo() { std::cout << "\n\n------------------------------" << std::endl; std::cout << " Device Event Handler demonstration" << std::endl; int eventCounter = 0; // number of events // register our event handler with eventCounter I1_RegisterDeviceEventHandler(&MyDeviceEventFunction, &eventCounter); // .... // .... // .... // Unregister our event handler I1_RegisterDeviceEventHandler(NULL, NULL); } Meine Versuche in Delphi:
Delphi-Quellcode:
type
TEventEnum = (eI1ProbuttonPressed = $01, I1ProScanReadyToMove = $02, eI1ProLampRestore = $03, eI1ProArrival = $11, eI1ProDeparture = $12); var // Register DLL function: I1_RegisterDeviceEventHandler: procedure(iH: THandle; var EventCounter: integer); cdecl; // Own event procedure: procedure MyDeviceEventFunction(iH: THandleArray; MyEvent: TEventEnum; var refCounter: integer); implementation uses ..... // ***************************************************************** // Register the Event-Handler: // ***************************************************************** function IsConnected: integer; var p: Pointer; begin Result := 0; // Default kein Fehler // Register the Event-Handler: // Hier kommen die Fehlermeldungen des Compilers: // a) I1_RegisterDeviceEventHandler(^MyDeviceEventFunction, p); // -> Fehler: Inkompatible Typen 'Cardinal' und 'Char' // b) I1_RegisterDeviceEventHandler(@MyDeviceEventFunction, p); // -> Fehler: Inkompatible Typen 'Cardinal' und 'Pointer' end; // ***************************************************************** // Own procedure for event: // ***************************************************************** procedure MyDeviceEventFunction(iH: THandleArray; MyEvent: TEventEnum; var refCounter: integer); // This procedure is called if an event happens: begin ShowMessage('Event'); // Dummy -> event fired end; In der Delphi-Funktion IsConnected kommen die Compilerfehlermeldungen wie dort beschrieben (Inkompatible Typen.....). Meine Definitionen/Deklarationen sind offensichtlich falsch. Ich weiß aber nicht - trotz langer Suche im INet - wo ich den Hebel ansetzen muss. Daher bin ich für jeden Hinweis dankbar. Sollte ich noch entscheidende Dinge zum Verständnis vergessen haben anzufügen, bitte anmeckern. Vielen Dank, Gerald P.S.: Version Delphi 2007 (2009) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz