Problem beim statischem einbinden



  • Hallo!

    Ich habe ein MFC-DLL Projekt, welches ich statisch einbinden möchte. Dessen Compilereinstellungen sind:

    Konfigurationstyp: Dynamische Bibliothek (.dll)
    Verwendung von MFC: MFC in einer statischen Biblothek verwenden
    Laufzeitbibliothek: Multithreaded-Debug (/MTd)

    In meinem Testprojekt habe ich nun die .lib unter zusätzliche Abhängigkeiten eingebunden und folgenden Code

    #include <Windows.h>
    #include "C:\Tools\MyApp\MyApp.h"
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    {
    	return 0;
    }
    

    Doch trotzdem erhalte ich die Fehlermeldung
    *
    1>c:\programme\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
    *

    Mache ich irgendetwas falsch?

    Danke und Gruß, Vanish



  • Ohje, man sollte schon mal die Augen öffnen. Hatte in dem Testprojekt unter Laufzeitbibliothek: Multithreaded-Debug-DLL (/MDd) eingestellt.

    Trotzdem eine Frage, kann ich jetzt nur noch statisch einbinden, oder auch gemischt, also irgendwann später im Programm Bibliotheken dynamisch laden?

    Gruß Vanish


  • Mod

    Wenn musst Du alles auf statisch einstellen!

    Was meinst Du mit gemischt?



  • Guten morgen!

    Habe bisher noch keine DLL Erfahrung, daher die wahrscheinlich wirre Frage...

    Bisher habe ich meine Anwendung implizit mit einer DLL verknüpft, dazu musste die Anwendung mit dem Schalter /MT[d] (wie die DLL) kompiliert werden.
    Wenn ich aber im späteren Verlauf der Anwendung noch eine weitere DLL (mit /MD[d] kompiliert) explizit (mittels LoadLibary) einbinden möchte, kann ich dies trotzdem machen?

    Da fällt mir noch eine zweite Frage ein: DLL wurde implizit verknüpft, die Anwendung ist nun etwas größer als die DLL. Warum muss die Anwendung noch zusätzlich die DLL mitgeliefert bekommen? Dll ist doch direkt in die Anwendung eingebunden, ist das keine redundanz?

    Gruß Vanish


  • Mod

    Du redest mir hier viel zu Allgemein von DLLs.
    Der Schalter /MT... regelt wie die CRT DLLs verwendet werdenb und nicht wie allgemein DLLs verwendet werden.
    Du kannst immer per LoadLibrary eine DLL alden. Da spielt der MT Schalter keinerlei Rolle.

    Wenn die CRT statisch gebunden ist, dann ist der Code der sie benützt (DLL oder EXE) natürlich größer, aber man spart sich das Ausliefern der CRT DLLs.

    Dir muss erstmal klar werden was die CRT ist... denke ich...



  • Danke Martin, ich beginne so langsam zu verstehen 🙂

    Gruß Vanish


Anmelden zum Antworten