@@ -1595,7 +1595,19 @@ RegisterClassA(CONST WNDCLASSA *lpWndClass)
1595
1595
if (lpWndClass == NULL )
1596
1596
return 0 ;
1597
1597
1598
- RtlCopyMemory (& Class .style , lpWndClass , sizeof (WNDCLASSA ));
1598
+ /* These MUST be copied manually, since on 64 bit architectures the
1599
+ alignment of the members is different between the 2 structs! */
1600
+ Class .style = lpWndClass -> style ;
1601
+ Class .lpfnWndProc = lpWndClass -> lpfnWndProc ;
1602
+ Class .cbClsExtra = lpWndClass -> cbClsExtra ;
1603
+ Class .cbWndExtra = lpWndClass -> cbWndExtra ;
1604
+ Class .hInstance = lpWndClass -> hInstance ;
1605
+ Class .hIcon = lpWndClass -> hIcon ;
1606
+ Class .hCursor = lpWndClass -> hCursor ;
1607
+ Class .hbrBackground = lpWndClass -> hbrBackground ;
1608
+ Class .lpszMenuName = lpWndClass -> lpszMenuName ;
1609
+ Class .lpszClassName = lpWndClass -> lpszClassName ;
1610
+
1599
1611
Class .cbSize = sizeof (WNDCLASSEXA );
1600
1612
Class .hIconSm = NULL ;
1601
1613
@@ -1613,7 +1625,19 @@ RegisterClassW(CONST WNDCLASSW *lpWndClass)
1613
1625
if (lpWndClass == NULL )
1614
1626
return 0 ;
1615
1627
1616
- RtlCopyMemory (& Class .style , lpWndClass , sizeof (WNDCLASSW ));
1628
+ /* These MUST be copied manually, since on 64 bit architectures the
1629
+ alignment of the members is different between the 2 structs! */
1630
+ Class .style = lpWndClass -> style ;
1631
+ Class .lpfnWndProc = lpWndClass -> lpfnWndProc ;
1632
+ Class .cbClsExtra = lpWndClass -> cbClsExtra ;
1633
+ Class .cbWndExtra = lpWndClass -> cbWndExtra ;
1634
+ Class .hInstance = lpWndClass -> hInstance ;
1635
+ Class .hIcon = lpWndClass -> hIcon ;
1636
+ Class .hCursor = lpWndClass -> hCursor ;
1637
+ Class .hbrBackground = lpWndClass -> hbrBackground ;
1638
+ Class .lpszMenuName = lpWndClass -> lpszMenuName ;
1639
+ Class .lpszClassName = lpWndClass -> lpszClassName ;
1640
+
1617
1641
Class .cbSize = sizeof (WNDCLASSEXW );
1618
1642
Class .hIconSm = NULL ;
1619
1643
0 commit comments