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 ?


  • Mod

    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 😞


  • Mod

    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.


Anmelden zum Antworten