error C2664



  • hallo.

    ich habe eine frage zu folgender methode:

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    		return -1;
    
    	// create a view to occupy the client area of the frame
    	if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
    		CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
    	{
    		TRACE0("Failed to create view window\n");
    		return -1;
    	}
    
        m_wndChild1.Create(NULL,"MyChild1",WS_CHILD|WS_VISIBLE,
                           CRect(10,10,300,200),this,1,NULL);
        m_wndChild2.Create(NULL,"MyChild2",WS_CHILD|WS_VISIBLE,
                           CRect(50,50,340,240),this,2,NULL);
    
    	return 0;
    }
    

    warum erhalte ich für "MyChild1" und "MyChild2" folgende fehlermeldungen, obwohl ich das beispiel aus einem tutorial übernommen habe?

    error C2664: 'CWnd::Create' : cannot convert parameter 2 from 'const char [9]' to 'LPCTSTR'

    liegt das vielleicht daran, dass ich einen neueren compiler nutze als der autor?

    DANKE.
    STICK.

    EDIT:
    ich denke, dass mit oben beschriebenem problem auch die fehlermeldung

    error C2440: 'initializing' : cannot convert from 'LPWSTR' to 'char *'

    für den code

    static const char* m_acSYSICONS[] = {IDI_APPLICATION,IDI_INFORMATION,
                                             IDI_WARNING,IDI_ERROR,
                                             IDI_QUESTION,IDI_WINLOGO};
    

    eng verknüpft ist.



  • Ich tippe mal auf ein Problem mit UNICODE vs. ANSI. (wenn du dein Programm als UNICODE compilierst, verwenden/erwarten viele Funktionen wchar_t Eingaben - und die sind nur bedingt kompatibel zu char). Als Lösung kannst du dafür sorgen, daß dein gesamtes Programm mit UNICODE zurechtkommt:

    m_wndChild1.Create(NULL,_T("MyChild1"),WS_CHILD|WS_VISIBLE,
                           CRect(10,10,300,200),this,1,NULL);
    
    static LPCSTR m_acSYSICONS[] = {IDI_APPLICATION,IDI_INFORMATION,
                                    IDI_WARNING,IDI_ERROR,
                                    IDI_QUESTION,IDI_WINLOGO};
    


  • danke für die antwort, aber was ist den der unterschied zwischen UNICODE und ANSI? wie kriege ich raus, wie ich mein programm kompiliere?

    DANKE.
    STICK.



  • stick_thai schrieb:

    danke für die antwort, aber was ist den der unterschied zwischen UNICODE und ANSI?

    Schau mal ins Magazin, da stehen einige Artikel zum Thema UNICODE. (der wesentliche Unterschied ist die Größe eines 'Zeichens' - ANSI-Programme verwenden char (1 Byte), UNICODE-Programme wchar_t (2+ Bytes) und können entsprechend mehr Zeichen darstellen.

    wie kriege ich raus, wie ich mein programm kompiliere?

    Das müsste irgendwo in den Compiler-Optionen einstellbar sein.
    (und notfalls erkennst du es auch an den Fehlermeldungen - wenn char's nicht nach LPCSTR umgewandelt werden können, arbeitest du mit UNICODE, genauso wenn in deinen Fehlermeldungen Funktionsnamen mit W am Ende auftauchen).

    Aber sicherer ist es, dafür zu sorgen, daß dir das egal sein kann, indem du TCHAR und seine Verwandten anstelle von char verwendest.



  • Hallo CStoll,

    sehe gerade, dass es zu meinem problem auch was im internet gibt:
    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=849851&SiteID=1

    hätte vielleicht vorher mal ausführlicher suchen sollen 🙄
    trotzdem danke!

    STICK.


Anmelden zum Antworten