C++ Dlls nach MinGW update nicht lauffähig



  • ~~Ich habe MinGW aktualisiert und versucht, die BeispielDlls von Code::Blocks oder wxDev-C++ zu laden.
    Nach dem ersten Versuch stürzte gleich alles ab, weil neuerdings eine libgcc_s_dw2-1.dll benötigt wird, obwohls früher auch ohne ging, aber was solls.
    Dll in den Ordner gezogen und fertig. (Alternativ kann man wohl auch -static-libgcc linken.)
    Danach passierte garnix. Zwar schön, dass es nicht mehr abstürzt, aber ne MessageBox sollte schon noch kommen.

    Also
    C Dlls lassen sich laden
    C++ Dlls nich
    Warum?

    (Dazu sei noch gesagt, dass ich zum ersten mal MinGW aktualisiert habe, kann also sein, dass irgendwelche Angaben in der IDE falsch sind.)

    Hab alles gelöscht, was irgendwie mit MinGW zu tun haben könnte und ne alte Version von wxDev-C++ installiert. Auch damit kann ich keine funktionsfähigen C++-Dlls erstellen (nur C-Dlls).
    Anscheinend muss ich etwas fundamentales falsch machen.
    Hat jemand ne Vermutung?~~

    Wenn man Dlls mit g++ compiled wird DllMain nicht mehr aufgerufen.
    Um das zu beheben stellt man dem einfach extern "C" vor.

    Dll laden:

    #include <windows.h>
    #include <stdio.h>
    
    int main(){
    	LoadLibrary("Project1.dll");
    	getchar();
    	return 0;
    }
    

    DLL:

    #include <windows.h>
    //Hier muss >>>extern "C"<<< vor, sonst gehts nicht
    extern "C" BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved){
    	Beep(1000, 100);
    	MessageBox(NULL, "Text", "Title", 0);
        return TRUE;
    }
    


  • Das ist doch C und kein C++ Quelltext oder hab ich etwas übersehen?

    Schreib mal ganz exakt wie du den Compiler und den Linker aufrufst.
    Der überwiegende Teil der Netzbeispiele funktioniert nicht oder ich ich nur die falschen getestet. 😃

    Je nach Compilerversion können unterschiedliche Aufrufkonventionen erforderlich sein!

    MfG f.-th.



  • wxDev-C++ und Code::Blocks haben für nen paar Sachen templates.
    Die C dll templates kann ich laden und ich krieg dann nen Beep und ne MessageBox.
    Die C++ templates erzeugen zwar auch Dlls, wenn ich die aber lade passiert garnix.
    Ich hatte da fast alles rausgelöscht, um sicherzugehen, dass es nich daran liegt.
    Ich hab mal alle Dateien extern hochgeladen, weil ich hier den attachment button nicht finde.
    Außer den Linkern im project sind keine weiteren angegeben.

    http://www.mediafire.com/?9o3imu6bjts124d

    edit:
    scheint wohl am compiler zu liegen, dass dllmain nicht aufgerufen wird
    dummerweise brauche ich auf jeden Fall C++-Support, also suche ich weiter nach einer Lösung
    edit2:
    Bugfix:
    extern "C" vor dllmain behebt das Problem 😃
    das Problem scheint altbekannt zu sein, nur hab ich nach den falschen Schlüsselwörtern gesucht



  • Irgendwie denke ich, hab ich nicht ganz verstanden was du vorhast?

    Soll das Programm auf Konsole laufen oder unter Windows?

    Also prinzipiell sind C++ Dll unter MinGW möglich siehe:
    http://www.c-plusplus.net/forum/214232

    MfG f.-th.


Anmelden zum Antworten