Erweiterungs-Dll mit statischer MFC Library
-
Hi,
ich möchte meine DLL (erweiterungs DLL) mit statischer Library verwenden, da auf den Zielrechnern mehrere DLLs fehlen.
Dazu habe ich folgende Einstellung gemacht:
Properties - C/C++ - General - Use of MFC: Use MFC in a static Library, dann bekomm ich folgende Fehlermeldung:
Please use the /MD switch for _AFXDLL builds
Stelle ich unter Properties - C/C++ - Code Generation den Menüpunkt auf Multi-threaded DLL (/MD), dann bekomm ich folgende Fehlermeldung:
Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
Warum bekomme ich diesen Fehler? Wie kann man ihn beheben?
Danke und Lg
Kerberos
-
Vielleicht hilft es ja.
http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/1f63701d-7481-4d30-a6b4-952dca9a3fae/
-
Erweitertungs DLL sind sowohl auf die MFC als DLL Version als auch auf die CRT als DLL Version agewiesen.
Andernfals wäre es keine Erweiterungs-DLL!Wnen es eine "echte" Erwieterungs-DLL sein soll, für eine bestehende EXE müssen auch deren MFC-DLL und CRT-DLL vorhanden sein.
Erweiterungs-DLLs müssen die selbe CRT- und MFC-DLL Version nutzen wie die EXE, die sie nutzt.
Andernfalls musst Du eine normale DLL bauen...
-
Hi!
Danke für die Antworten!
Wnen es eine "echte" Erwieterungs-DLL sein soll, für eine bestehende EXE müssen auch deren MFC-DLL und CRT-DLL vorhanden sein.
Erweiterungs-DLLs müssen die selbe CRT- und MFC-DLL Version nutzen wie die EXE, die sie nutzt.
Meine Erweiterungs-Dll wird nicht von einer EXE angezogen, sondern von einer regulären (heisst doch so?) MFC-DLL.
Diese beiden DLLs gehören zusammen. Sie wurden nur aufgeteilt, damit ein Teil der Funktionalität ausgetauscht werden kann.
Somit können die DLLs auch von jedem beliebigen Programm aufgerufen werden. Es wäre natürlich praktisch wenn diese DLLs auch auf einem Rechner ausgeführt werden könnten wenn kein MFC installiert ist, darum möchte ich die gleich mit dazu linken.
Lg
Kerberos
-
Dann musst Du eine reguläre DLL erzeugen. Du darfst aber keine Objekte austauchen. Keine Klassen ewportieren etc. Das ist eben so wenn man statisch linkt.
Deine Interfaces/Funkitionen der DLLs sollten nur PODs nutzen.
Eine Extension DLL ist per Definition eben nur mit der DLL Version der MFC möglich.
-
Hi Martin,
danke für Deine Antwort!
Aber wie kommt denn ein PC der kein Visual-Stduio installiert hat an die MFC-DLLs die ich benötigte (z. B. MFC90u.dll, weil die fehlt u. A.)
Da muss es ja sowas wie das .NET Framework für Endbenutzer geben?
Btw. Welche MFC ist denn gerade aktuell, bzw. wirt mit dem Visual Studio 2008 mitgeliefert? (...9.0??)
-
Diese CRT und MFC DLLs werden installiert!
Such mal nach vcredist_x86.exeDas ist das aktuelle VS-2008 SP1
http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=enDas Thema wurde in diesen Foren schon 1000mal behandelt (niedrig geschätzt ;))
-
Hi Martin,
vielen Dank für deine Antwort!
Ich hab nach vcredist_x86.exe gesucht und immer noch eine kurze Fragen:Wenn ich die MFC dynamisch verwende, muss ich dann unter "Properties-C/C++-Gode Generation-Runtime Library"
Multi-threadeded DLL (/MD) oder Multi-Threaded (/MT) einstellen?
Vielen Dank!
Lg Kerberos
-
MFC als DLL erzwingt CRT als DLL, also Multi-threadeded DLL (/MD)!
Du bekommst doch eine entsprechenden Fehler, wenn Du es falsch machst...
Mit den Fehlern hast Du doch den Thread bekommen
-
Danke Martin!
(Stand auf /MT, obwohl ich eine DLL mit dynamischer MFC DLL erzeuge, das ist mir spanisch vorgekommen)
Lg Kerberos