Hallo,
ich versuche gerade ein altes Projekt, eine DLL die sowohl ATL als auch
MFC verwendet, um ein Ultimate Grid
(http://www.codeproject.com/KB/MFC/UltimateGrid.aspx) zu erweitern.
Weiters wird der "atlcontrols.h" Wrapper verwendet. Ich arbeite dabei
mit VC++ 2005.
Das funktioniert jedoch nicht und bei meinen Recherchen bin ich bis
jetzt auf keine Lösung gestoßen. Das Ultimate Grid (und auch ein paar
verwandte Komponenten) verwendet ein paar MFC Klassen. Die "findet" der
Compiler jedoch nicht. Die problematischen Codezeilen, inkl. der
resultierenden Fehler sehen so aus. Folgefehler die beim Versuch auf das
Objekt zuzugreifen entstehen, habe ich dabei ausgeblendet:
1 | CToolTipCtrl m_ttc;
|
2 | //1>d:\XXX\ug\edit controls\OXEdit.h(499) : error C2079: 'COXEdit::m_ttc' verwendet undefiniertes class 'CToolTipCtrl'
|
3 |
|
4 | inline CToolTipCtrl* GetToolTip() { return &m_ttc; }
|
5 | //1>d:\XXX\ug\edit controls\OXEdit.h(279) : error C2440: 'return': 'int *' kann nicht in 'CToolTipCtrl *' konvertiert werden
|
6 |
|
7 |
|
8 | CToolInfo toolInfo;
|
9 | //1>.\UG\Edit Controls\OXEdit.cpp(241) : error C2065: 'CToolInfo': nichtdeklarierter Bezeichner
|
10 | //1>.\UG\Edit Controls\OXEdit.cpp(241) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'toolInfo'
|
11 | //1>.\UG\Edit Controls\OXEdit.cpp(241) : error C2065: 'toolInfo': nichtdeklarierter Bezeichner
|
12 |
|
13 |
|
14 | CImageList m_leftImages;
|
15 | //1>d:\XXX\ug\celltypes\UGCTMail.h(96) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'm_leftImages'
|
16 | //1>d:\XXX\ug\celltypes\UGCTMail.h(96) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
|
17 | //1>d:\XXX\ug\celltypes\UGCTMail.h(96) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
|
18 | //1>d:\XXX\ug\celltypes\UGCTMail.h(97) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'm_rightImages'
|
19 | //1>d:\XXX\ug\celltypes\UGCTMail.h(97) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
|
20 | //1>d:\XXX\ug\celltypes\UGCTMail.h(97) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
|
21 | //1>.\UG\CellTypes\UGCTMail.cpp(67) : error C2065: 'm_leftImages': nichtdeklarierter Bezeichner
|
22 | //1>.\UG\CellTypes\UGCTMail.cpp(67) : error C2228: Links von ".Create" muss sich eine Klasse/Struktur/Union befinden.
|
Diese Fehler lassen sich beheben indem man explizit den "ATLControls"
namespace angibt. Damit verlagert sich das Problem aber nur, weil dann
Folgefehler auftreten weil die ATL Controls nicht die gleichen
Funktionen unterstützen wie die MFC Variante. Das sieht dann z.B. so
aus:
1 | ATLControls::CToolTipCtrl m_ttc;
|
2 | ...
|
3 | if(::IsWindow(m_ttc.GetSafeHwnd())){...}
|
4 | //1>.\UG\Edit Controls\OXEdit.cpp(152) : error C2039: 'GetSafeHwnd': Ist kein Element von 'ATLControls::CToolTipCtrlT<Base>'
|
5 | //1> with
|
6 | //1> [
|
7 | //1> Base=ATL::CWindow
|
8 | //1> ]
|
Meine Frage ist jetzt, wie kann ich dem Compiler klar machen dass der
die MFC Controls verwenden soll? Intellisense findet interessanterweise
die Definition, verweißt aber auf die Mehrdeutigkeit. So etwas wie einen
MFC namespace, mit dem ich explizit auf die von mir gewünschte Klasse
zugreifen kann, habe ich bis jetzt nicht gefunden. Gibt es eine andere
Möglichkeit auf die MFC Controls zuzugreifen?
Danke im Vorhinein,
Reinhard