AtUsbHid.dll - hidRegister/hidUnregisterDeviceNotification
-
Hallo,
ich bin gerade dabei eine DLL mit dem CBuilder zu schreiben welche die Atmel-Dll
AtUsbHid nutzt. Läuft soweit erstmal alles, ich habe allerdings ein Problem
mit den Methoden:
hidRegisterDeviceNotification
hidUnregisterDeviceNotification
isMyDeviceNotificationunter http://www.atmel.com/dyn/resources/prod_documents/doc7645.pdf steht zu diesen Methoden, daß sie nur in VC++ Projekten funktionieren.
Meine Frage nun, hat jemand diese Methoden trotzdem erfolgreich in einem CBuilder-Projekt nutzen können? Und wenn ja, wie? Kurzer Codehinweis wäre sehr nett.Ein brauchbarer workaround würde auch helfen.
vielen Dank im voraus
oldman
-
Meine Glaskugel macht grad nen Firmwareupdate, da gibts wohl ein Problem, kannst du mir sagen, woran das liegt?
Scherz beiseite, was für ein Problem genau gibt es?
-
So ganz verstehe ich dein Problem auch nicht, denn eine DLL ist kein compilerspezifisches Produkt. Anders sieht´s allerdings bei statischen Bibliotheken aus, vielleicht meinst du da?
Du kannst die DLL mit LoadLibrary laden und die Funktionseinsprungpunkte mit GetProcAddress holen.
#include <cstdio> #include <windows.h> int main() { typedef int (*myfunc)( double ); HMODULE DLLModule = ::LoadLibrary( "mylib.dll" ); if( DLLModule ) { myfunc f = reinterpret_cast<myfunc>( ::GetProcAddress( DLLModule, "MyFunc" ) ); if( f ) { int Result = f( 2.5 ); } ::FreeLibrary( DLLModule ); } }
-
Hallo,
ich lade die DLL dynamisch.
Ist auch schon klar, daß ich die Funktionen aufrufen kann.
Ich hatte mir diese Funktionen noch nicht häher angesehen, denn in der Dokumentation steht ebend, daß diese Funktionen nur in einem VC++ Projekt laufen würden.Ich habe diese Sachen jetzt mal codiert und bekomme jetzt die WindowsMessage
WM_DEVICECHANGE wenn ich irgendein USB_Device ziehe oder stecke.meine Methodedefinition:
void __fastcall TForm1::WMDEVICECHANGE(Messages::TMessage &Message) { }
Laut Doku wird eine Methode folgender Definition aufgerufen.
OnDeviceChange(UINT nEventType, DWORD dwData);
Ich denke mal dies ist die VC++ Konvention. Wie komme ich aber jetzt im CBuilder an die Date dwData? Dieser Wert wird für den Aufruf der Methode isMyDeviceNotification der AtmelDll benötigt.
Die Daten in TMessage welche ich empfange, sind für meine müden Augen auch immer die selben verbirgt sich dort noch ein Pointer auf irgendetwas?
Msg = 537 (WM_DEVICECHANGE)
WParam = 7
LParam = 0
Result = 0
WParamLo = 7U
WParamHi = 0U
LParamLo = 0U
LParamHi = 0U
ResultLo = 0U
ResultHi = 0Uweitere Hinweise erwünscht.
oldman