invalid conversion Problem
-
Vorweg: Ich kenne mich als Linux-User mit dem Verwenden bzw Schreiben von DLLs unter Windows nicht aus.
Vielleicht sind die Typen doch "leicht" unterschiedlich und man sieht es nur nicht. Ich denke da an die Aufruf-Konvention und/oder "Linkage" bei Fuktionen. Wenn Du zB eine Funktion unter C++ schreiben willst, die von einem C-Programm aufgerufen werden soll müsstest Du so etwas machen:
extern "C" { void funktion_aus_C_aufrufbar(); }In der Windowswelt mit den DLLs mag das noch einen Tucken komplizierter sein. Da bekommt man oft Dinge zu sehen wie
__declspec(dllimport)etc.Gruß,
SP
-
Na dazu habe ich noch die definition von diesem Aufruf:
TRegisterInterfaceChangeNotification RegisterInterfaceChangeNotification; typedef DWORD (STDCALL* TUnregisterInterfaceChangeNotification) (void);Da ist ja das STDCALL drin.
Edit: Ja DLL Import klappt ja auch
HINSTANCE dll_handle = LoadLibrary("usbdmx.dll"); RegisterInterfaceChangeNotification = (TRegisterInterfaceChangeNotification)GetProcAddress(dll_handle, "RegisterInterfaceChangeNotification");Nur eben die Funktion 'RegisterInterfaceChangeNotification()' gibt mir einen Fehler aus. Die restlichen Funktionen funktionieren auch.
-
Dodo84 schrieb:
Na dazu habe ich noch die definition von diesem Aufruf:
TRegisterInterfaceChangeNotification RegisterInterfaceChangeNotification; typedef DWORD (STDCALL* TUnregisterInterfaceChangeNotification) (void);Da ist ja das STDCALL drin.
Schon, aber deine Funktion InterfaceChange ist nicht damit deklariert worden, oder übersehe ich was?
-
Is dies nicht die deklaration der Funktion?
void InterfaceChange(void) { printf("Interface configuration has changed\n"); }Steht auch im ersten Post!
-
nein, die Definition.
-
Dodo84 schrieb:
Is dies nicht die deklaration der Funktion?
theta schrieb:
nein, die Definition.
Zur Erklärung: http://www.c-plusplus.net/forum/viewtopic-var-t-is-61231.html
-
Müsste es also so aussehen??
void InterfaceChange(void); // deklaration void InterfaceChange(void) { // definition printf("Interface configuration has changed\n"); }
-
void STDCALL InterfaceChange(void) { printf("Interface configuration has changed\n"); }
-
theta schrieb:
nein, die Definition.
Aber als solche auch eine Deklaration. Die Funktion wird schliesslich auch deklariert, wenn nirgends ein Prototyp mit ; am Ende steht.
-
Mit
void STDCALL InterfaceChange(void) { printf("Interface configuration has changed\n"); }kommt beim Kompilieren jetzt zwar kein Fehler mehr, aber dafür schmiert das Programm am.
blabla.exe hat ein Fehler festgestellt und muss beendet werden.
-
Das hilft uns jetzt nicht allzu viel...
Am besten gehst du mit dem Debugger durch, schaust, in welcher Zeile das Programm abstürzt und überprüfst, was zu diesem Zeitpunkt nicht stimmt (Variablen etc.)
-
Kennt sich jemand mit Dev-C++ aus? Ich komme einfach nicht mit dem Debugger zurecht.
Wenn ich einen haltepunkt setzte und dann bei "Fehlersuche" -> "Ausführen bis Cursor" mache wird das Projekt Kompiliert aber danach passiert nichts weiter.
-
Für IDE/Compiler-Fragen ist hier eigentlich ein anderes Forum zuständig. In dessen FAQ findest du auch was über DEV-Cpp:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-237002.html