Erro compiler code MASM - error A2163: non-benign structure redefinition - Help

Started by ontreus, March 12, 2012, 03:07:40 PM

Previous topic - Next topic

ontreus

Hi
I'm trying to compile this code and am having errors

C:\masm32\source\teste.asm(15) : error A2163: non-benign structure redefinition: incorrect initializers : ImageCodecInfo
C:\masm32\source\teste.asm(16) : error A2163: non-benign structure redefinition: incorrect initializers : ImageCodecInfo
C:\masm32\source\teste.asm(28) : error A2161: non-benign structure redefinition: too few labels : ImageCodecInfo





Here's the code:


; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    include \masm32\include\masm32rt.inc
    include \masm32\include\gdiplus.inc
    includelib \masm32\lib\gdiplus.lib
   

GdiplusStartupInput    STRUCT
      GdiplusVersion                          DWORD ?
      DebugEventCallback                  DWORD ?
      SuppressBackgroundThread       DWORD ?
      SuppressExternalCodecs            DWORD ?
GdiplusStartupInput ENDS

ImageCodecInfo STRUCT
      ClassID                       CLSID <>
      FormatID                    GUID <>
      CodecName                DWORD ?
      DllName                      DWORD ?
      FormatDescription        DWORD ?
      FilenameExtension        DWORD ?
      MimeType                   DWORD ?
      Flags                          DWORD ?
      Version                       DWORD ?
      SigCount                     DWORD ?
      SigSize                        DWORD ?
      SigPattern                   DWORD ?
      SigMask                      DWORD ?
    ImageCodecInfo ENDS

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    .data
      token                         dd 0
      image                         dd 0
      numEncoders              dd 0
      sizeImageCodecInfo      dd 0
      pImageCodecInfo         dd 0
      gdipsi                         GdiplusStartupInput <1>  ; version must be 1
    .code
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
start:
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

    print "GdiplusStartup rv "
    invoke GdiplusStartup, ADDR token, ADDR gdipsi, NULL
    print ustr$(eax),13,10

    print "GdipLoadImageFromFile rv "
    invoke GdipLoadImageFromFile, uni$("sample.bmp"), ADDR image
    print ustr$(eax),13,10

    print "GdipGetImageEncodersSize rv "
    invoke GdipGetImageEncodersSize, ADDR numEncoders,
                                     ADDR sizeImageCodecInfo
    print ustr$(eax),13,10

    print "numEncoders "
    print ustr$(numEncoders),13,10
    print "sizeImageCodecInfo "
    print ustr$(sizeImageCodecInfo)," bytes",13,10

    mov pImageCodecInfo, alloc(sizeImageCodecInfo)

    print "GdipGetImageEncoders rv "
    invoke GdipGetImageEncoders, numEncoders, sizeImageCodecInfo,
                                 pImageCodecInfo
    print ustr$(eax),13,10

    xor ebx, ebx
    mov esi, pImageCodecInfo
    .WHILE ebx < numEncoders
      invoke crt_printf, chr$("%S%c"), [esi].ImageCodecInfo.MimeType, 10
      .IF ucmp$([esi].ImageCodecInfo.MimeType, uni$("image/jpeg") )
        print "GdipSaveImageToFile rv "
        invoke GdipSaveImageToFile, image, uni$("sample.jpg"),
                                    esi, NULL
        print ustr$(eax),13,10
      .ENDIF
      add esi, SIZEOF ImageCodecInfo
      inc ebx
    .ENDW

    print "GdipDisposeImage rv "
    invoke GdipDisposeImage, image
    print ustr$(eax),13,10

    print "GdiplusShutdown rv "
    invoke GdiplusShutdown, token
    print ustr$(eax),13,10

    free pImageCodecInfo

    inkey "Press any key to exit..."
    exit
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
end start


I tried changing the lines

ImageCodecInfo STRUCT
      ClassID                       CLSID <>
      FormatID                    GUID <>
      ...


here for these
  ImageCodecInfo STRUCT
      ClassID                       CLSID <?>
      FormatID                    GUID <?>
      ...


and continues giving error

Are there any missing some reference file *.inc or *.lib ?

I appreciate any help

(I use Masm32 vrs8, win XP)
(The erro ML erro:

A2161          non-benign structure redefinition : too few labels
               Not enough members were defined in a structure redefinition.

A2163          non-benign structure redefinition : incorrect initializers
               A STRUCT or UNION was redefined with a different initializer value. )

qWord

You are redefining the two structures - delete/comment them out and it works. The declaration can be found in windows.inc.
FPU in a trice: SmplMath
It's that simple!

ontreus