PRB: A2041 Initializing a Large STRUCTLast reviewed: January 24, 1997Article ID: Q155047 |
The information in this article applies to:
SYMPTOMSAttempting to initialize a structure causes one or more of the following assembly errors:
error A2041: string or text literal too long error A2039: line too long CAUSEMASM 6.x has a 255-character line limit. Even when the initialization spans multiple lines, the entire structure initialization is considered one line and is subject to the 255-character limit.
RESOLUTIONThe following sample illustrates three possible workarounds:
MORE INFORMATION
Sample Code; Assemble /c /Fl and examine list file to verify output. ; To test each case, set the following EQU. Set to 0 to ; demonstrate the A2041 error. Set to 1, 2, 3 to test ; each workaround in turn. WorkaroundA2041 EQU 0 .MODEL SMALL, C .NOLIST INCLUDE WIN.INC .LIST ;--------------------------------------------------------- ; Example structure adapted from WINDOWS.H OPENFILENAME STRUCT 1t lStructSize DWORD ? hwndOwner HWND ? hInstance HINSTANCE ? lpstrFilter LPCSTR ? lpstrCustomFilter LPSTR ? nMaxCustFilter DWORD ? nFilterIndex DWORD ? lpstrFile LPSTR ? nMaxFile DWORD ? lpstrFileTitle LPSTR ? nMaxFileTitle DWORD ? lpstrInitialDir LPCSTR ? lpstrTitle LPCSTR ? Flags DWORD ? nFileOffset UINT ? nFileExtension UINT ? lpstrDefExt LPCSTR ? lCustData LPARAM ? lpfnHook FARPROC ? lpTemplateName LPCSTR ?OPENFILENAME ENDS
IF WorkaroundA2041 EQ 2 ;--------------------------------------------------------- ; helper STRUCTs derived by breaking up the original ; OPENFILENAME STRUCT OPENFILENAME_1 STRUCT 1t lStructSize DWORD ? hwndOwner HWND ? hInstance HINSTANCE ? lpstrFilter LPCSTR ?OPENFILENAME_1 ENDS OPENFILENAME_2 STRUCT 1t lpstrCustomFilter LPSTR ? nMaxCustFilter DWORD ? nFilterIndex DWORD ? lpstrFile LPSTR ?OPENFILENAME_2 ENDS OPENFILENAME_3 STRUCT 1t nMaxFile DWORD ? lpstrFileTitle LPSTR ? nMaxFileTitle DWORD ? lpstrInitialDir LPCSTR ?OPENFILENAME_3 ENDS OPENFILENAME_4 STRUCT 1t lpstrTitle LPCSTR ? Flags DWORD ? nFileOffset UINT ? nFileExtension UINT ?OPENFILENAME_4 ENDS OPENFILENAME_5 STRUCT 1t lpstrDefExt LPCSTR ? lCustData LPARAM ? lpfnHook FARPROC ? lpTemplateName LPCSTR ?OPENFILENAME_5 ENDS ENDIF .DATA IF WorkaroundA2041 EQ 0 ;--------------------------------------------------------- ; This STRUCT definition and initialization generates: ; error A2041: string or text literal too long ; error A2039: line too long
ofn OPENFILENAME { SIZEOF(OPENFILENAME), ; lStructSize DWORD NULL, ; hwndOwner HWND NULL, ; hInstance HINSTANCE NULL, ; lpstrFilter LPCSTR NULL, ; lpstrCustomFilter LPSTR 0, ; nMaxCustFilter DWORD 0, ; nFilterIndex DWORD NULL, ; lpstrFile LPSTR 0, ; nMaxFile DWORD NULL, ; lpstrFileTitle LPSTR 0, ; nMaxFileTitle DWORD NULL, ; lpstrInitialDir LPCSTR NULL, ; lpstrTitle LPCSTR 0, ; Flags DWORD 0, ; nFileOffset UINT 0, ; nFileExtension UINT NULL, ; lpstrDefExt LPCSTR 0, ; lCustData LPARAM NULL, ; lpfnHook FARPROC NULL } ; lpTemplateName LPCSTRENDIF IF WorkaroundA2041 EQ 1 ;--------------------------------------------------------- ; This STRUCT definition and initialization will assemble ; due to keeping the total character count down - removing ; comments, white space, line continuation characters, etc.
ofn OPENFILENAME { SIZEOF(OPENFILENAME), NULL, NULL, NULL, NULL, 0, 0, NULL, 0, NULL, 0, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL }ENDIF IF WorkaroundA2041 EQ 2 ;--------------------------------------------------------- ; This STRUCT definition and initialization will assemble ; by breaking up the original STRUCT and declaring the ; STRUCTs derived from this breakup. This is preceded by ; defining a LABEL to refer to the entire region of memory. ;
ofn LABEL OPENFILENAME OPENFILENAME_1 { SIZEOF(OPENFILENAME), ; DWORD lStructSize NULL, ; hwndOwner HWND NULL, ; hInstance HINSTANCE NULL } ; lpstrFilter LPCSTR OPENFILENAME_2 { NULL, ; lpstrCustomFilter LPSTR 0, ; nMaxCustFilter DWORD 0, ; nFilterIndex DWORD NULL } ; lpstrFile LPSTR OPENFILENAME_3 { 0, ; nMaxFile DWORD NULL, ; lpstrFileTitle LPSTR 0, ; nMaxFileTitle DWORD NULL } ; lpstrInitialDir LPCSTR OPENFILENAME_4 { NULL, ; lpstrTitle LPCSTR 0, ; Flags DWORD 0, ; nFileOffset UINT 0 } ; nFileExtension UINT OPENFILENAME_5 { NULL, ; lpstrDefExt LPCSTR 0, ; lCustData LPARAM NULL, ; lpfnHook FARPROC NULL } ; lpTemplateName LPCSTRENDIF IF WorkaroundA2041 EQ 3 ;--------------------------------------------------------- ; This STRUCT definition and initialization will assemble ; by defining a LABEL to refer to a region of memory ; followed by explicitly declaring data for each of the ; members of the STRUCT.
ofn LABEL OPENFILENAME DWORD SIZEOF(OPENFILENAME) ; lStructSize HWND NULL ; hwndOwner HINSTANCE NULL ; hInstance LPCSTR NULL ; lpstrFilter LPSTR NULL ; lpstrCustomFilter DWORD 0 ; nMaxCustFilter DWORD 0 ; nFilterIndex LPSTR NULL ; lpstrFile DWORD 0 ; nMaxFile LPSTR NULL ; lpstrFileTitle DWORD 0 ; nMaxFileTitle LPCSTR NULL ; lpstrInitialDir LPCSTR NULL ; lpstrTitle DWORD 0 ; Flags UINT 0 ; nFileOffset UINT 0 ; nFileExtension LPCSTR NULL ; lpstrDefExt LPARAM 0 ; lCustData FARPROC NULL ; lpfnHook LPCSTR NULL ; lpTemplateNameENDIF END
|
KBCategory: kbprg kberrmsg
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |