Problem mit afx.h
-
Hallo zusammen.
Ich habe versucht folgenden Code zum laufen zu bringen :
[cpp] include <afxwin.h> class CMyApp : public CwinApp { public: virtual BOOL InitInstance(); }; class CMyWindow : public CFrameWnd { public: CMyWindow() { Create(0, L"Hmm ein Win Fenster"); } }; BOOL CMyApp::InitInstance() { m_pMainWnd = new CMyWindow; m_pMainWnd->ShowWindow(m_nCmdShow); return TRUE; } CMyApp Machwas; [/cpp]
Wenn ich nun compilieren will bekomme ich einen Fehler ...
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] d:\programme\microsoft visual studio 8\vc\atlmfc\include\afx.h 24
Als Compiler verwende ich VS2005.
Wenn jemand rat weiß wäre das toll ...
-
geh mal in die PRojekteigenschaften.
Du hast wohl eingestellt, das die MFC statisch gelinkt wird, aber in den C/C++ Einstellungen unter Codegenerierung /MD stehen.
Entweder dort auf Multithreaded stellen (und nicht wie jetzt Multithreaded-DLL) oder du darfst die MFC nicht statisch linken sondern dynamisch
-
Hmm nu bekomm ich die fehlermeldung WINVER nicht gefunden...
Hab zwar das Vista Patch für Vs2005 aber irgwendwie scheint ers nicht zu erkennen.
Ne Idee was ich da machen kann ?
-
Würdest Du bitte die genaue Fehlermeldung nennen?
-
Das ist die Ausgabe, sieht für mich aus, als würde er da Betriebsystem nicht erkennen oder sowas in der Art.
Klappt übrigens auch auf XP nicht -> selbe Fehlermeldung.
WINVER not defined. Defaulting to 0x0502 (Windows Server 2003) 1>e:\c++\mfc1sttest\mfc1sttest\main.cpp(5) : error C2504: 'CwinApp': Basisklasse undefiniert 1>e:\c++\mfc1sttest\mfc1sttest\main.cpp(15) : error C2664: 'CFrameWnd::Create': Konvertierung des Parameters 2 von 'const wchar_t [22]' in 'LPCTSTR' nicht möglich 1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat. 1>e:\c++\mfc1sttest\mfc1sttest\main.cpp(21) : error C2065: 'm_pMainWnd': nichtdeklarierter Bezeichner 1>e:\c++\mfc1sttest\mfc1sttest\main.cpp(22) : error C2227: Links von "->ShowWindow" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. 1> Typ ist ''unknown-type'' 1>e:\c++\mfc1sttest\mfc1sttest\main.cpp(22) : error C2065: 'm_nCmdShow': nichtdeklarierter Bezeichner 1>Das Buildprotokoll wurde unter "file://e:\C++\MFC1stTest\MFC1stTest\Debug\BuildLog.htm" gespeichert. 1>MFC1stTest - 5 Fehler, 0 Warnung(en)
langsam bin ich ratlos
-
Das ist kein Fehler! Das ist ein Hinweis!
Die zweite Zeile weist Dich auf einen Tippfehler hin. Es heißt C***W***inApp und nicht C***w***inApp
Ansonsten ist dieses Sample Schrott. Es benützt nicht die TCHAR Notation:
Create(0, _T("Hmm ein Win Fenster"));
Je nach eingestelltem Zeichensatz bekommst Du andere Fehler.
-
Das erste ist ein simpler Tipfehler (CWinApp schreibt sich mit großem W), das zweite deutet auf Konflikte mit den UNICODE-Einstellungen hin - und der Rest dürften Folgefehler aus dem ersten sein.
-
Hmm einen schritt weiter der Fehler mit der afx.h is nu weg.
nu bekomm ich :
[code]Fehler 1 error C2664: 'CFrameWnd::Create': Konvertierung des Parameters 2 von 'const wchar_t [22]' in 'LPCTSTR' nicht möglich e:\c++\mfc1sttest\mfc1sttest\main.cpp 15
[/code]
leider versteh ich nicht ganz was mir die referenz sagen will ...
-
Der besagt, daß du das Programm anscheinend im ANSI-Modus übersetzt hast (da erwartet Create() keinen wchar_t-String, sondern einen char-String). Zur Lösung ist es am einfachsten, die Möglichkeiten von TCHAR auszunutzen:
Create(0, _T("Hmm ein Win Fenster"));
-
Hmm Create(0, _T("Hmm ein Win Fenster")); führt zu
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_main" in Function " __tmainCRTStartup". libcmt.lib fatal error LNK1120: 1 nicht aufgelöste externe verweise MFC1stTest.ex
-
OK, wir sind einen Schritt weiter - der Compiler ist glücklich und nun können wir uns um den Linker kümmern. (will sagen: der Fehler war bestimmt auch vorher da - aber du bist nie bis zu der Stelle vorgedrungen)
Und die Lösung des Problems ist, daß du anscheinend das Projekt falsch aufgezogen hast - je nach Projekttyp benötigst du einen anderen Einstiegspunkt (main(), WinMain() bzw. die CWinApp-Klasse), der hier offenbar nicht passt.
(welchen Typ hast du eigentlich beim Start ausgewählt? ich tippe auf "Win32 Konsolenapplikation")
-
leeres projekt.