dll mit msvc aus einem von qmake -tp vc erstellten Projekt



  • Moin,

    ich habe ein Projekt mit C++ und Qt erstellt. Dazu habe ich qmake -project und im anschluss qmake -tp vc ausgeführt um das Projekt für Visual C++ 2008 zu erstellen.

    Jetzt möchte ich wissen, wie ich aus meinen Dateien eine dll erstelle.

    Ich habe eine main.cpp in der einen Thread startet und sonst noch drei Qt spezifische Aktionen ausführt. Um den Rest kümmert sich der Thread.

    Ich möchte einfach in einem anderen Programm die dll einbinden und von dort dann die main meines jetzigen Programmes aufrufen.

    Danke im Voraus.
    Matze-o



  • In einer DLL gibts keine main, nur eine DllMain. Du musst aus deiner main eine normale Funktion machen und die in deiner DLL exportieren, so dass du sie in deinem Hauptprogramm aufrufen kannst. Zum Thema DLLs gibts auf msdn.com einige Infos.



  • Hmm, ok also ich benenne meine main um, und dann füge ich __declspec( dllexport ) hinzu, richtig? Wenn ja, werden alle verwendeten Klassen ebenfalls beinhaltet?

    #include <QApplication>
    #include "Control_C.h"
    __declspec( dllexport ) int executeProgram(int argc, char *argv[])
    /**
    * This function is the global entrance point.
    * @param argc argument counter
    * @param *argv[] argument array
    * @return 0 if the program terminated normally
    */
    int executeProgram(int argc, char *argv[])
    {
    	// Needed by Qt to create the form.
    	QApplication app(argc, argv);
    
    	// Creates an instance of the controller class.
    	Control_C *myControl_C = new Control_C();
    
    	// Starts the controller class thread;
    	myControl_C->start();
    
    	return app.exec();
    
    }
    

    Dann erhalte ich folgende Fehlermeldung

    error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_main" in Funktion "_WinMain@16".
    


  • Na ja, du kannst nicht einfach eine Deklaration ändern. Wie du siehst, findet der Linker jetzt bei dir die main nicht... Eine DLL muss einen bestimmten Aufbau haben (z.B. mit DllMain). Im Visual Studio würde man einfach ein neues Projekt des Typs Win32-DLL oder MFC-DLL erzeugen. Wie du das genau händisch machen musst, kann ich dir leider nicht sagen. Du wirst vermutlich auch den Linker anders aufrufen müssen. Aber allein mit __declspec(dllexport) machst du noch keine DLL...

    Btw, glaubst du, dass du mit deinen Qt-Geschichten hier im richtigen Forum bist? Ich glaube, die Frage gehört eher hierhin:

    http://www.c-plusplus.net/forum/viewforum-var-f-is-51.html


Anmelden zum Antworten