Statische AFX und MFC Verknüpfung

05/07/2010 - 18:15 von Peter Mairhofer | Report spam
Hallo!

(Ich fange einen neuen Thread an, da es m.E. um eine komplett andere
Fragestellung geht).

Ich implementiere in einer DLL eine COM Komponente (Ein Pluggable
Protocol). Dies mache ich mit der ATL. Zusàtzlich werden aber CStringW
und CMemFile benötigt, also Teile der MFC.

Ich schaffe es aber nicht, beide Bibliotheken statisch einzucompilieren.
Wenn ich "MFC in einer Statischen Bibliothek" und "Statische Verknüpfung
zu ATL" wàhle, dann erhalte ich (aus afxver_.h):

#if defined(_AFXDLL) && !defined(_DLL)
#error Please use the /MD switch for _AFXDLL builds
#endif

Mit dem MD Switch geht es, allerdings ist die Laufzeitbibliothek dann
"Multithreaded-DLL (/MD)". Das heisst: Meine DLL benötigt die MFC DLLs!
(genauer: MFC71U.dll, MSVCR71.dll, MSVCP71.dll).

Gibt es eine Lösung für dieses Problem?

LG
Peter
 

Lesen sie die antworten

#1 Peter Mairhofer
06/07/2010 - 10:06 | Warnen spam
Hi,

Am 05.07.2010 18:15, schrieb Peter Mairhofer:
Hallo!

(Ich fange einen neuen Thread an, da es m.E. um eine komplett andere
Fragestellung geht).

Ich implementiere in einer DLL eine COM Komponente (Ein Pluggable
Protocol). Dies mache ich mit der ATL. Zusàtzlich werden aber CStringW
und CMemFile benötigt, also Teile der MFC.

Ich schaffe es aber nicht, beide Bibliotheken statisch einzucompilieren.
Wenn ich "MFC in einer Statischen Bibliothek" und "Statische Verknüpfung
zu ATL" wàhle, dann erhalte ich (aus afxver_.h):

#if defined(_AFXDLL) && !defined(_DLL)
#error Please use the /MD switch for _AFXDLL builds
#endif

Mit dem MD Switch geht es, allerdings ist die Laufzeitbibliothek dann
"Multithreaded-DLL (/MD)". Das heisst: Meine DLL benötigt die MFC DLLs!
(genauer: MFC71U.dll, MSVCR71.dll, MSVCP71.dll).

Gibt es eine Lösung für dieses Problem?



Es wird alles viel schlimmer :-(

Offenbar ist eine zusàtzliche Option die ich benötige auch "CRT
Verwendung in ATL minimieren". Doch das haut tausende Compilerwarnings
(auch in Zusammenhang mit der MFC).

stdafx.cpp
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(85) : error C2976: 'StrTraitMFC_DLL':
Nicht genügend Vorlagenargumente
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(67): Siehe Deklaration von
'StrTraitMFC_DLL'
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(85) : error C3203: 'StrTraitMFC_DLL':
Die Klassenvorlage ist als Vorlagenargument für den Vorlagenparameter
'StringTraits' ungültig; Typ real erwartet
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(87) : error C2976: 'StrTraitMFC_DLL':
Nicht genügend Vorlagenargumente
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(67): Siehe Deklaration von
'StrTraitMFC_DLL'
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(87) : error C3203: 'StrTraitMFC_DLL':
Die Klassenvorlage ist als Vorlagenargument für den Vorlagenparameter
'StringTraits' ungültig; Typ real erwartet
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(95) : error C2976: 'StrTraitMFC_DLL':
Nicht genügend Vorlagenargumente
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(67): Siehe Deklaration von
'StrTraitMFC_DLL'
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(95) : error C3203: 'StrTraitMFC_DLL':
Die Klassenvorlage ist als Vorlagenargument für den Vorlagenparameter
'StringTraits' ungültig; Typ real erwartet
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(96) : error C2976: 'StrTraitMFC_DLL':
Nicht genügend Vorlagenargumente
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(67): Siehe Deklaration von
'StrTraitMFC_DLL'
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(96) : error C3203: 'StrTraitMFC_DLL':
Die Klassenvorlage ist als Vorlagenargument für den Vorlagenparameter
'StringTraits' ungültig; Typ real erwartet
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(97) : error C2976: 'StrTraitMFC_DLL':
Nicht genügend Vorlagenargumente
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(67): Siehe Deklaration von
'StrTraitMFC_DLL'
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\afxstr.h(97) : error C3203: 'StrTraitMFC_DLL':
Die Klassenvorlage ist als Vorlagenargument für den Vorlagenparameter
'StringTraits' ungültig; Typ real erwartet
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\atltime.h(320) : error C2664:
'ATL::CTimeSpan::Format': Konvertierung des Parameters 1 von
'ATL::CStringT<BaseType,StringTraits>' in 'LPCSTR' nicht möglich
with
[
BaseType=wchar_t,
StringTraits=int
]
Kein benutzerdefinierter Konvertierungsoperator verfügbar, der
diese Konvertierung durchführen kann, oder der Operator kann nicht
aufgerufen werden
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\atltime.h(388) : error C2664:
'ATL::CTime::Format': Konvertierung des Parameters 1 von
'ATL::CStringT<BaseType,StringTraits>' in 'LPCSTR' nicht möglich
with
[
BaseType=wchar_t,
StringTraits=int
]
Kein benutzerdefinierter Konvertierungsoperator verfügbar, der
diese Konvertierung durchführen kann, oder der Operator kann nicht
aufgerufen werden
C:\Programme\Microsoft Visual Studio .NET
2003\Vc7\atlmfc\include\atltime.h(393) : error C2664:
'ATL::CTime::FormatGmt': Konvertierung des Parameters 1 von
'ATL::CStringT<BaseType,StringTraits>' in 'LPCSTR' nicht möglich
with
[
BaseType=wchar_t,
StringTraits=int
]
Kein benutzerdefinierter Konvertierungsoperator verfügbar, der
diese Konvertierung durchführen kann, oder der Operator kann nicht
aufgerufen werden

Zusàtzlich verwende ich auch std::string und std::wstring; dort habe ich
das gleiche Problem.


Irgendwelche Tipps?

Irgendwie bereu ichs schon zutiefst überhaupt mit ATL und MFC bei so
einer simplen DLL angefangen zu haben: AAARGH!

LG
Peter

Ähnliche fragen