Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Komischer c++ Syntax: Nullpointer dereferenzieren?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.07.2005, 17:32 Uhr
~nagger
Gast


direkt aus der MFC kopiert:


C++:
int AFXAPI AfxMessageBox(LPCTSTR lpszText, UINT nType, UINT nIDHelp)
{
    CWinApp* pApp = AfxGetApp();
    if (pApp != NULL)
        return pApp->DoMessageBox(lpszText, nType, nIDHelp);
    else
        return pApp->CWinApp::DoMessageBox(lpszText, nType, nIDHelp);
}

class CWinApp : public CWinThread
{
...
    virtual int DoMessageBox(LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt);
...
};



Wenn pApp==NULL dann "pApp->CWinApp:oMessageBox()".
Was ist denn das für ein komischer Syntax?
Einen Nullpointer dereferenzieren?
Und DoMessageBox() ist ja nicht mal static, wie man vlt wegen der '::' vermuten könnte.
Was wird denn da jetzt aufgerufen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.07.2005, 17:57 Uhr
virtual
Sexiest Bit alive
(Operator)


Kenne dieMFC nicht so dolle (wenn ich diesen Code sehe, bin ich auch glücklich drüber).
Ich denke, das ist ein Unportabler dirty hack, dh andere Compiler als der VC werden ggf. drüber
stolpern.

Das "pApp->CWinApp:oMessageBox(lpszText, nType, nIDHelp)" stellt sicher, daß die exakt angegebene Version von DoMessageBox aufgerufen, wird, also besteht zum Methodenaufruf in diesem Fall kein Grund, über die VMT zu gehen, so daß this null sein kann. In der Methode selbst wird dann vermutlich geprüft, ob this null ist..
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.07.2005, 21:26 Uhr
Pler
Einer von Vielen
(Operator)


Das ist Quellcode von Microsoft????
Was heisst aus MFC kopiert? Oder meinst du MSDN?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.07.2005, 22:25 Uhr
ao

(Operator)


Laut MSDN-Lib liefert AfxGetApp einen Zeiger auf das CWinApp-Objekt der jeweiligen Applikation. Kein Wort darüber, ob dieser Zeiger NULL sein kann. Weiß jemand Näheres? Ist das vielleicht nur Verlegenheitscode?

Übrigens: Ab ins MFC-Forum

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.07.2005, 07:21 Uhr
Tommix



'Morgen,
der Zeiger ist dann NULL, wenn kein CWinApp-Objekt existiert:

C++:
#include "stdafx.h"
#include <afxtempl.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//CWinApp theApp;

int _tmain(void)
{
    ASSERT(AfxGetApp() == NULL);
    AfxMessageBox("Hallöchen!");


Wie auch immer finde ich den oben angeführten Code schon recht seltsam. Einer meiner Favoriten aus dieser Kategorie ist auch

C++:
CString s((LPCSTR)IDS_MESSAGE);



- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.07.2005, 09:46 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von Pler:
Das ist Quellcode von Microsoft????
Was heisst aus MFC kopiert? Oder meinst du MSDN?

Viele der Quellcode-Dateien der MFC sind beim Visual C++ dabei, wg Debuggen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: