2016-05-09 5 views
1

Verwendung Wenn ich die WNDCLASSEX wcex Variablendefinition aus Hauptfunktion (als globale Variable) gesetzt wird die KlasseFehlgeschlagen Fenster zu registrieren, wenn lokal WNDCLASSEX Variable

#include <windows.h> 
WNDCLASSEX wcex; 
int main() 
{ 
    wcex.cbSize = sizeof (WNDCLASSEX); 
    wcex.lpszClassName = "Success" ; 

    if (!RegisterClassEx (&wcex)) 
    { 
     MessageBox (NULL, "Failed to register window class.", "Error", MB_OK); 
    } 
} 

erfolgreich registriert sein, aber wenn ich es in der Hauptfunktion Es wird nicht registriert

#include <windows.h> 
int main() 
{ 
    WNDCLASSEX wcex; 
    wcex.cbSize = sizeof (WNDCLASSEX); 
    wcex.lpszClassName = "Success" ; 

    if (!RegisterClassEx (&wcex)) 
    { 
     MessageBox (NULL, "Failed to register window class.", "Error", MB_OK); 
    } 
} 

Ich kann den Grund nicht herausfinden, bitte helfen Sie in dieser Ausgabe. Vielen Dank im Voraus.

Antwort

4

Objekte mit statischen storage duration sind 0-initialisiert 1). Ihr zweites Beispiel unterscheidet sich semantisch darin, dass wcex (automatische Speicherdauer) zufällige Werte enthält. Um der Semantik zu entsprechen, verwenden Sie stattdessen WNDCLASSEX wcex = { 0 };.


1) Sie werden mit einem C++ Compiler Unter der Annahme. Die Regeln für C sind unterschiedlich.

+0

Für C verwenden Sie stattdessen 'memset()' oder 'ZeroMemory()'. –

+0

@RemyLebeau: Ich bezog mich auf die Regeln für die Initialisierung von Objekten mit statischer Speicherdauer. Diese sind in C++ null-initialisiert, aber ich kenne C nicht gut genug, um die Regeln dort zu kennen. Ich glaube, dass C keine Initialisierung vorschreibt, und bei Verwendung von C wären beide "wcex" -Strukturen nicht initialisiert und enthalten zufällige Werte. – IInspectable

+0

@Intspectable: Danke, aber können Sie mir sagen, warum lehnt RegisterClass funtion die (Random-Werte) WNDCLASSEX Variablen ab? –

Verwandte Themen