DLL mit Dev-C++ und NetBeans C++ Pack nicht lauffähig
-
Morgen,
ich habe eine DLL in Dev-C++ geschrieben. Diese DLL lade ich dynamisch in einem Programm. Das Funktioniert soweit auch wunderbar.
Ich beschäftige mich derzeit mit NetBeans und dem C/C++ Pack, da ich über einen Umstieg nachdenke. Daher habe ich zu Testzwecken genau dieselbe DLL und genau dasselbe Programm, welches die DLL dynamisch lädt, geschrieben. Jetzt kommt mein Problem.Die DLL von Dev-C++ funktioniert im Dev-C++ Programm sowie im NetBeans C++ Programm.
Die DLL die mit NetBeans erstellt wurde funktioniert allerdings nur in NetBeans. Rufe ich die DLL in meinem Dev-C++ Programm auf passiert nix.
Das hier ist der Programmcode:Dev-C++ sowie Netbeans Main Programm, welches die DLL dynamisch aufruft.
#include <iostream> #include <stdlib.h> #include <windows.h> using namespace std; typedef void (*ptrEinfach)(); int main(int argc, char *argv[]) { ptrEinfach einfach; HINSTANCE hLib; hLib = LoadLibrary("Projekt2.dll"); cout << hLib << endl; BOOL status; if (hLib) { einfach = (ptrEinfach) GetProcAddress(hLib, "einfach"); einfach(); status = FreeLibrary(hLib); } else cout << "Fehler: Konnte die Funktion nicht aufrufen" <<"\n"; return 0; }
Dazu der Code der DLL:
Dieser ist ebenfalls für Dev-C++ sowie NetBeans derselbe.dllmain.cpp
/* Replace "dll.h" with the name of your header */ #include "dll.h" #include <windows.h> #include <iostream> using namespace std; void einfach() { cout <<"einfach() dll" <<"\n"; } BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ , DWORD reason /* Reason this function is being called. */ , LPVOID reserved /* Not used. */ ) { switch (reason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } /* Returns TRUE on success, FALSE on failure */ return TRUE; }
dll.h
#ifndef _DLL_H_ #define _DLL_H_ #if BUILDING_DLL # define DLLIMPORT __declspec (dllexport) #else /* Not BUILDING_DLL */ # define DLLIMPORT __declspec (dllimport) #endif /* Not BUILDING_DLL */ extern "C" { DLLIMPORT void einfach(); } #endif /* _DLL_H_ */
Also vielleicht noch einmal mein Problem genauer erklärt.
Dev-C++ DLL kann in Dev-C++ Main sowie in NetBeans Main ausgeführt werden.
NetBeans DLL kann NUR in NetBeans Main ausgeführt werden. Wird diese DLL im Dev-C++ Main geladen so erscheint die Konsole und nix weiter Passiert.
Ich habe selber schon ein paar Sachen getestet.
z.B. habe ich feststellen können, dass der Code bis zu HINSTANCE hLib (Zeile 11) ausgeführt wird. Bei der darauf folgenden Zeile bleib das Programm scheinbar hängen.NetBeans arbeitet mit Cygwin, Dev-C++ arbeitet mit MinGW32. Da ich in NetBeans noch nicht die Möglichkeit gefunden habe den Compiler zu ersetzen, habe ich dies auf der Dev-C++ Seite getan.
Ich habe in den Compiler-Einstellungen unter Dev-C++ den MinGW32 Compiler mit dem Cygwin ersetzt. Anschließend die beiden Projekte neu Kompiliert und es lief auch alles soweit gut. Doch wenn ich nun die erstellte DLL aus NetBeans ausführen wollte so entstand dasselbe Problem wie oben erwähnt.
Da das alles etwas kompliziert ist versuch ich es noch mal zu verdeutlichen.Dev-C++ mit MinGW32
DLL und Main -> OKDev-C++ mit Cygwin
DLL und Main -> OKNetBeans mit Cygwin
DLL und Main -> OKDev-C++ MinGW32 DLL und NetBeans Cygwin Main -> OK
Dev-C++ Cygwin DLL und NetBeans Cygwin Main -> NICHT ok
NetBeans Cygwin DLL und Dev-C++ Main -> NICHT ok
Ich möchte aber das es immer läuft egal wer die DLL erstellt hat.
Irgendwelche möglichen Lösungsansätze?
-
Hallo,
also normalerweise solltes du den default Compiler über Tools -> Options -> Miscellaneous -> C/C++ Projects einstellen könne.
mfg∞
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Guten Morgen,
ich denke ich habe etwas gefunden. Nur weiß ich leider nicht wie ich es einstellen soll.
http://comments.gmane.org/gmane.os.cygwin/65998
Dort ist die rede von "Compile with -mno-cygwin", nur leider habe ich es noch nicht geschafft. Kann mir vielleicht jemand weiter helfen wie ich deses Befehl einbinden kann?
-
Problem gelöst.
Bei der makefile musst der Befehl CPPFLAGS=-mno-cygwin hinzugefügt werden.
-
Kollege, danke dir vielmals für den Code !!!
lool
Jetzt weis ich wenigstend (eeendlich) wie ich eine DLL unter Dev-C++ schreibe !!