dll einbinden



  • Tag,

    ich möchte eine DLL (mit Header) die auf das ATL und MFC - Library zugreift in ein Qt-Project einbinden.
    Ich benutze das Visual Studio 2008.

    Das Problem ist jetzt das Qt die ganzen Headers (afx.h: No such file or directory...) nicht findet, obwohl ich auf den VC-Includpath verweise.

    Welche Einstellungen muss ich in meinem Visual Studio vornehmen, damit ATL und MFC in der dll integriert werden?

    Oder welche Libs benötige ich alles in meinem Qt?

    Hab leider noch keine Erfahrung mit dll Programmierung und einbindung.


  • Mod

    Verstehe ich nicht. Deine Entwicklungsumgebung hat doch per Standard alles so gesetzt, dass die entsprechenden Header gefunden werden.

    Hast Du die VC-Directories unter Tools -> Options geändert?



  • ok, war schlecht beschrieben.

    nochmal neu:
    ich hab mir eine klasse in vc++ mit visual studio 2008 geschrieben, die auf einen opc-server zugreift. getestet hab ich die klasse mit einer mfc-anwendung und es hat alles funktioniert.
    ich will jetzt diese klasse in qt(qt Creator 2.0.0) einbinden (problem: klasse greift auf mfc + atl libs zu). das ziel sollte sein das ich ein object dieser klasse in qt erzeugen kann.
    jetzt habe ich mir mit visual studio 2008 eine mfc-dll erstellt, in der meine opc-klasse eingebunden ist. die dll und die header habe ich in qt eingebunden + die zusätzlichen includepaths, aber es kommen noch immer sehr viele fehlermeldungen wegen nicht gefundenen header-dateien...
    meine frage ist jetzt: welche libs muss ich alle einbinden oder kann ich die ganzen bibliotheken schon in der dll mitgeben?



  • Also prinzipiell kannst du deine DLL antürlich statisch an die MFC-DLLs binden. Glaube aber nicht, dass das dein Problem behebt.
    Wie hast du die DLL eingebunden? Wenn die DLL schon fertig gelinkt ist, sollten ja keine Fehlermeldungen bezüglich irgendwelcher header kommen. Wenn du in deiner DLL allerdings MFC-Klassen exportierst, dann bekommst du beim einbinden des DLL Headers natürlich ein Problem, da dein qt Creator die MFC-Header ja nicht kennt.

    Ich würde dir folgendes empfehlen:
    Deine DLL kann intern zwar MFC verwenden, sollte aber keine Interfaces exportieren, die MFC-Klassen erwarten. Verwende nur primtive Datentypen. Dann sollte es beim Einbinden des Headers auch keine Probleme geben.



  • Leider benötigt meine Klasse bisher die MFC-Lib und das ist auch unumgänglich. Also muss ich jetzt, so wie ich das verstehe, mir eine Interface-Klasse basteln, die dann auf meine Opc-Klasse mit dem MFC-Lib zugreift?



  • Im Prinzip ja. Du musst, wenn du deine MFC-DLL in einer Nicht-MFC Umgebung benutzen willst, Funktionen exportieren, die nur primitive Datentypen verwenden.



  • Das Prinzip habe ich jetzt verstanden und es funktioniert auch, nur sobald ich meine OPC-Klasse, die auf MFC-Libs zugreift, in der Header einbaue, kommen wieder die gleichen Fehler (was mir schon davor klar war). Wie kann ich nun meine OPC-Klasse einbauen? Ich benötige auf jeden Fall ein globales Objekt von ihr.



  • Ob und wie das mit deiner OPC-Klasse in qt funktioniert kann ich dir leider nicht sagen. Du solltest diese Frage lieber in einem qt-Forum stellen. Ist ja im Prinzip kein MFC Problem.


Anmelden zum Antworten