La fonction CreateWindowEx échoue mais GetLastError () renvoie ERROR_SUCCESS

Je suis en train de créer une fenêtre simple avec C/C++ à l'aide de natif de Windows file d'attente de messages (sans .NET). J'ai suivi la MSDN tutoriel et a écrit quelques-uns de base du code qui crée une fenêtre vide:

void main()
    {
    HINSTANCE hinst;
    HWND hwndMain;
    WNDCLASSEX wnd;
    MSG msg;

    hinst = GetModuleHandle( NULL );
    memset( &wnd, 0, sizeof( wnd ) );
    wnd.cbSize = sizeof( wnd );
    wnd.lpszClassName = "MainWClass";
    wnd.lpfnWndProc = MainWProc;
    wnd.hInstance = hinst;
    int result = RegisterClassEx( &wnd );
    if( !result )
    {
        printf("RegisterClassEx error: %d\r\n", GetLastError() );
    }

    hwndMain = CreateWindowEx
        (
        0, //extended styles
        wnd.lpszClassName, //class name
        "Main Window", //window name
        WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL | WS_MINIMIZEBOX, //style tags
        CW_USEDEFAULT, //horizontal position
        CW_USEDEFAULT, //vertical position
        CW_USEDEFAULT, //width
        CW_USEDEFAULT, //height
        (HWND) NULL, //parent window
        (HMENU) NULL, //class menu
        (HINSTANCE) wnd.hInstance, //some HINSTANCE pointer
        NULL //Create Window Data?
        );

    if( !hwndMain )
    {
        printf("Oh shi- %d\n", GetLastError() );
    }
    ShowWindow( hwndMain, SW_SHOWDEFAULT );
    UpdateWindow( hwndMain );
}

Quand je exécuter/déboguer le programme, CreateWindowEx renvoie la valeur 0, ce qui signifie qu'il a échoué. Cela déclenche le message d'erreur "Oh shi- [code d'erreur]". Le plus déroutant, c'est que le message d'erreur d'impressions à la console:

Oh shi - 0

Le code d'erreur renvoyé par GetLastError() est 0, ce qui est ERROR_SUCCESS!

Je suis à une perte totale; ce qui se passe? Je suis tellement confuse...

P. S.
Je suis à l'aide de Visual C++ Express 2010 sur Windows 7 32 bits. J'ai écrit une Procédure de Windows par ailleurs, mais il renvoie 0 pour tous les cas. Cependant, si quelqu'un veut le voir, je serai heureux de le montrer.

J'ai changé le Projet de jeu de caractères par Défaut de mon projet Visual C++ pour "Non Défini". Je ne devrais pas besoin de préfixe L de mes choses.

Edit: ajout de wnd.hInstance = hinst;

Edit: suppression de l'inutile (WNDPROC) en fonte d'

Edit: ajout de la vérification des erreurs pour RegisterClassEx

Il s'avère que le problème était avec Visual C++ Express (ou du moins, pas avec le code lui-même). J'ai copié le code pour un autre projet et ça a fonctionné.

source d'informationauteur Joshua