Delphi in C++ umwandeln
-
Versuch mal
#define WIN32_LEAN_AND_MEAN #include <windows.h> typedef void(__stdcall *GenFuncPtr)(void); static GenFuncPtr g_FuncPtrArray[3]; static HMODULE hdll; BOOL Init(void) { hdll = LoadLibrary("LPT_dmx.dll"); if(!hdll) return FALSE; g_FuncPtrArray[0] = (GenFuncPtr)GetProcAddress(hdll,"OPEN_LPT_INTERFACE"); g_FuncPtrArray[1] = (GenFuncPtr)GetProcAddress(hdll,"CLOSE_LPT_INTERFACE"); g_FuncPtrArray[2] = (GenFuncPtr)GetProcAddress(hdll,"SEND_DMX_COMMAND"); if(!g_FuncPtrArray[0] || !g_FuncPtrArray[1] || !g_FuncPtrArray[2]) { FreeLibrary(hdll); return FALSE; } return TRUE; } void Exit(void) { FreeLibrary(hdll); } // Eigentliche Funktionen DWORD OPEN_LPT_INTERFACE(DWORD number) { typedef DWORD(__stdcall *open_lpt_i)(DWORD); return ((open_lpt_i)g_FuncPtrArray[0])(number); } void CLOSE_LPT_INTERFACE(void) { typedef void(__stdcall *close_lpt_i)(void); ((close_lpt_i)g_FuncPtrArray[1])(); // cast wäre nicht nötig } void SEND_DMX_COMMAND(DWORD channel, DWORD data) { typedef void(__stdcall *send_dmx_c)(DWORD, DWORD); ((send_dmx_c)g_FuncPtrArray[2])(channel, data); }
-
Das hatten wir doch schonmal, oder nicht?
Das funktioniert nicht, fehler:
zugriffsverletzung bei adresse 000000000. Lesen von Adresse 000000000.
-
Genannter Code funktioniert bei mir problemlos.
Hier der Code mit dem ich getestet habe. Keine Meldung, gar nichts. Ausgedruckt wird ein Smilie.#define WIN32_LEAN_AND_MEAN #include <windows.h> typedef void(__stdcall *GenFuncPtr)(void); static GenFuncPtr g_FuncPtrArray[3]; static HMODULE hdll; BOOL Init(void) { hdll = LoadLibrary("LPT_dmx.dll"); if(!hdll) return FALSE; g_FuncPtrArray[0] = (GenFuncPtr)GetProcAddress(hdll,"OPEN_LPT_INTERFACE"); g_FuncPtrArray[1] = (GenFuncPtr)GetProcAddress(hdll,"CLOSE_LPT_INTERFACE"); g_FuncPtrArray[2] = (GenFuncPtr)GetProcAddress(hdll,"SEND_DMX_COMMAND"); if(!g_FuncPtrArray[0] || !g_FuncPtrArray[1] || !g_FuncPtrArray[2]) { FreeLibrary(hdll); return FALSE; } return TRUE; } void Exit(void) { FreeLibrary(hdll); } // Eigentliche Funktionen DWORD OPEN_LPT_INTERFACE(DWORD number) { typedef DWORD(__stdcall *open_lpt_i)(DWORD); return ((open_lpt_i)g_FuncPtrArray[0])(number); } void CLOSE_LPT_INTERFACE(void) { typedef void(__stdcall *close_lpt_i)(void); ((close_lpt_i)g_FuncPtrArray[1])(); // cast wäre nicht nötig } void SEND_DMX_COMMAND(DWORD channel, DWORD data) { typedef void(__stdcall *send_dmx_c)(DWORD, DWORD); ((send_dmx_c)g_FuncPtrArray[2])(channel, data); } int main() { if (Init()) { OPEN_LPT_INTERFACE(1); SEND_DMX_COMMAND(1, 1); CLOSE_LPT_INTERFACE(); return 0; } Exit(); return 1; }
-
Ich bin dir zu 1000 Dank verpflichtet!!!!
Es Funktioniert!!!!
Endlich!!!
Danke das ihr euch soviel mühe dabei gegeben habt!!
-
JBOpael schrieb:
Sgt. Nukem schrieb:
Sondern?!?
Bringt ne fehlermeldung!!
Oh Mann... Kein Wunder daß Dir keiner helfen konnte, wenn man Dir jede Fehlermeldung einzeln aus der Nase ziehen muß!!
HEY MAIN PC GEHT NNICHT MEHR AN, KANN MIR EINER HELFEN?! WO LIEGT DASD PROBLEM!!? DAANKE!!!111eins
-
Ich glaube ja immernoch, dass du durch den ganzen Borland-VCL-Kram die Übersicht verloren hast und einfach Init() nicht richtig aufgerufen hast.
-
JBOpael schrieb:
Es Funktioniert!!!!
Dann frage ich mich, was Du dann hier
JBOpael schrieb:
Das hatten wir doch schonmal, oder nicht?
Das funktioniert nicht, fehler:
zugriffsverletzung bei adresse 000000000. Lesen von Adresse 000000000.
gemacht hast, ich habe den gleichen Code genommen, nichts abgeändert, nur die main() hinzugefügt.
Naja, egal, wenn es jetzt läuft ist ja gut. :p
-
MirWirdsZuBlöd schrieb:
Ich glaube ja immernoch, dass du durch den ganzen Borland-VCL-Kram die Übersicht verloren hast und einfach Init() nicht richtig aufgerufen hast.
Das kann sein. Ich hab wohl vor lauter Bäumen den Wald nicht mehr gesehen.
Nochmals Danke an alle die ihren Teil dazu beigetragen haben!!
-
Wie schon gesagt wurde Init() vergessen.
Das ist das einzige was Sinn machen würde...
Sieht man ja auch bei dem Code auf Seite 5 (jetzt wo ich ihn mir nochmal angucke)...
-
ps c++ ist keine script sprache^^