MASM obj

Тема в разделе "WASM.ASSEMBLER", создана пользователем Relic, 20 май 2008.

  1. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    Есть ли возможность конвертнуть прицепленные исходники небольшой библиотеки в такие obj, которые бы понимал борландовский компилятор delphi?
    Опробованы (безрезультатно) такие методы, как:
    1) создание OMF obj с помощью ml /c /ID:\masm32\includeex\ *.asm
    2) COFF obj --> coff2omf by Walter Oney --> omf2d by EliCZ
    3) COFF/OMF by ml --> objconv by Agner Fog
    4) и еще различные вариации с применением вышеуказанных утилит...

    При компиле делфийского проекта получаю или "Bad object file format...", или "Unsatisfied forward or external declaration" :dntknw:
    Нужна помощь!
     
  2. GroundHog

    GroundHog New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2005
    Сообщения:
    35
    http://www.apihooks.com/EliCZ/export/OMF2D.zip
     
  3. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    GroundHog
    Пробовал это с различными опциями, то obj файлы резко худеют до сотен байт, то "Unsatisfied forward or external declaration"...
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Relic
    Попробуй создать библиотеку при помощи borland'овского tlib
    Код (Text):
    1. ml.exe /c *.asm
    2. tlib.exe pnglib.lib @listobj.rsp
    где содержимое listobj.rsp
    Код (Text):
    1. + adler.obj &
    2. + cdebug.obj &
    3. + CRC.obj &
    4. + data.obj &
    5. + helper.obj &
    6. + PNGI_BitmapInfo.obj &
    7. + PNGI_copymethods.obj &
    8. + PNGI_Decompress.obj &
    9. + PNGI_DeInterlaceProcs.obj &
    10. + PNGI_GenHufTable.obj &
    11. + PNGI_GetDecompressedSize.obj &
    12. + PNGI_GetNextChunk.obj &
    13. + PNGI_LoadHeader.obj &
    14. + PNG_Cleanup.obj &
    15. + PNG_CreateBitmap.obj &
    16. + PNG_Decode.obj &
    17. + PNG_GetPalette.obj &
    18. + PNG_Init.obj &
    19. + PNG_LoadCustom.obj &
    20. + PNG_LoadFile.obj &
    21. + PNG_LoadResource.obj &
    22. + PNG_OuputRaw.obj
    ps afaik твои исходники неполные, я взял оригинальные PNGlib: a free PNG decoder library.
    библиотеку, которая получилась у меня, прицепить не могу, нет окошка для аттача :dntknw:
     
  5. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    q_q
    Ок, создал я как ты написал с помощью борландского tlib pnglib.lib. А что дальше?
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Relic
    Добавить библиотеку в проект.
     
  7. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    q_q
    Кхм.. delphi не понимает static lib'ы, только obj.

    Можно ли исходники этой либы скомпилировать TASM'ом, тогда бы точно получился борландовский OMF obj? Я пробовал, но нарвался на кучу ошибок при компиляции :dntknw:
     
  8. Max

    Max Member

    Публикаций:
    0
    Регистрация:
    22 май 2003
    Сообщения:
    192
    Буквально только вчера:
    http://www.wasm.ru/forum/viewtopic.php?id=26891
     
  9. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Relic
    Тогда достаточно ml.exe /c *.asm. Будет омф. Создать юнит, например, pnglib, поместить в него что-то типа
    Код (Text):
    1.  
    2. unit PNGLib;
    3.  
    4. interface
    5.  
    6. uses Windows;
    7.  
    8. {$L adler.obj}
    9. {$L cdebug.obj}
    10. {$L CRC.obj}
    11. {$L data.obj}
    12. {$L helper.obj}
    13. {$L PNGI_BitmapInfo.obj}
    14. {$L PNGI_copymethods.obj}
    15. {$L PNGI_Decompress.obj}
    16. {$L PNGI_DeInterlaceProcs.obj}
    17. {$L PNGI_GenHufTable.obj}
    18. {$L PNGI_GetDecompressedSize.obj}
    19. {$L PNGI_GetNextChunk.obj}
    20. {$L PNGI_LoadHeader.obj}
    21. {$L PNG_Cleanup.obj}
    22. {$L PNG_CreateBitmap.obj}
    23. {$L PNG_Decode.obj}
    24. {$L PNG_GetPalette.obj}
    25. {$L PNG_Init.obj}
    26. {$L PNG_LoadCustom.obj}
    27. {$L PNG_LoadFile.obj}
    28. {$L PNG_LoadResource.obj}
    29. {$L PNG_OuputRaw.obj}
    30.  
    31. function PNG_Init(LPPNGINFO pPNGInfo) : BOOL; stdcall; external;
    32. function PNG_Cleanup(LPPNGINFO pPNGInfo) : BOOL; stdcall; external;
    33. function PNG_LoadFile(LPPNGINFO pPNGInfo, LPSTR lpFileName) : BOOL; stdcall; external;
    34. function PNG_LoadResource(LPPNGINFO pPNGInfo, HMODULE hInstance, LPSTR lpResName) : BOOL; stdcall; external;
    35. function PNG_LoadCustom(LPPNGINFO pPNGInfo, LPBYTE lpData, DWORD lnData) : BOOL; stdcall; external;
    36. function PNG_Decode(LPPNGINFO pPNGInfo) : BOOL; stdcall; external;
    37. function PNG_GetPalette(LPPNGINFO pPNGInfo, LPVOID lpOutput, DWORD dwFormat) : BOOL; stdcall; external;
    38. function PNG_OutputRaw(LPPNGINFO pPNGInfo, LPBYTE lpDest, DWORD dwFormat) : BOOL; stdcall; external;
    39. function PNG_CreateBitmap(LPPNGINFO pPNGInfo, HWND hWndCompatible, DWORD dwFormat, BOOL bDDB) : HBITMAP; stdcall; external;
    40.  
    41. + определить тип PNGINFO и LPPNGINFO
    42. + определить константы
     
  10. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    Max
    Спасибо за линк. С этой проблемой ("Unsatisfied forward or external declaration"), я думаю, разберусь. Но у меня еще затык и в другом: на два obj полученных из PNGI_Decompress.asm и PNGI_DeInterlaceProcs.asm получаю ошибку "Bad object file format..." ! Вот от этого бы как избавиться? omf2d не помогло :dntknw:

    q_q
    Такой юнит уже написал, см. ниже, но есть ошибки, см. выше :)
    Код (Text):
    1. unit PNGlib_;
    2.  
    3. interface
    4. uses Windows;
    5.  
    6. const
    7. (******************************************************************************
    8.  Copyproc types, used to build the PNG_OUTF_* values
    9.  ******************************************************************************)
    10.   PNGCP_X_X                         = 0;
    11.   PNGCP_16_16                   = 1;
    12.   PNGCP_16_16_BGR           = 2;
    13.   PNGCP_16_16_BGR_SA        = 3;
    14.   PNGCP_16_16_BGRA          = 4;
    15.   PNGCP_16_16_SA                = 5;
    16.   PNGCP_16_8                        = 6;
    17.   PNGCP_16_8_BGR                = 7;
    18.   PNGCP_16_8_BGR_SA         = 8;
    19.   PNGCP_16_8_BGRA           = 9;
    20.   PNGCP_16_8_SA                 = 10;
    21.   PNGCP_2_4                         = 11;
    22.   PNGCP_8_8_BGR                 = 12;
    23.   PNGCP_8_8_BGR_SA          = 13;
    24.   PNGCP_8_8_BGRA                = 14;
    25.   PNGCP_8_8_SA                  = PNGCP_16_8;
    26.  
    27. (******************************************************************************
    28.  Output formats
    29.  ******************************************************************************)
    30.   PNG_OUTF_G1_G1                    = $00010100+PNGCP_X_X; (*DIB default*)
    31.   PNG_OUTF_G2_G2                    = $00020000+PNGCP_X_X;
    32.   PNG_OUTF_G2_G4                    = $00020100+PNGCP_2_4; (*DIB default*)
    33.   PNG_OUTF_G4_G4                    = $00040100+PNGCP_X_X; (*DIB default*)
    34.   PNG_OUTF_G8_G8                    = $00080100+PNGCP_X_X; (*DIB default*)
    35.   PNG_OUTF_G16_G16              = $00100000+PNGCP_16_16;
    36.   PNG_OUTF_G16_G8               = $00100100+PNGCP_16_8; (*DIB default*)
    37.   PNG_OUTF_T8_T8_BGR            = $02080100+PNGCP_8_8_BGR; (*DIB default*)
    38.   PNG_OUTF_T16_T16_BGR      = $02100000+PNGCP_16_16_BGR;
    39.   PNG_OUTF_T16_T8_BGR       = $02100100+PNGCP_16_8_BGR; (*DIB default*)
    40.   PNG_OUTF_P1_P1                    = $03010100+PNGCP_X_X; (*DIB default*)
    41.   PNG_OUTF_P2_P2                    = $03020000+PNGCP_X_X;
    42.   PNG_OUTF_P2_P4                    = $03020100+PNGCP_2_4; (*DIB default*)
    43.   PNG_OUTF_P4_P4                    = $03040100+PNGCP_X_X; (*DIB default*)
    44.   PNG_OUTF_P8_P8                    = $03080100+PNGCP_X_X; (*DIB default*)
    45.   PNG_OUTF_GA8_GA8              = $04080000+PNGCP_X_X;
    46.   PNG_OUTF_GA8_G8               = $04080100+PNGCP_8_8_SA; (*DIB default*)
    47.   PNG_OUTF_GA16_GA16            = $04100000+PNGCP_16_16;
    48.   PNG_OUTF_GA16_G16             = $04100000+PNGCP_16_16_SA;
    49.   PNG_OUTF_GA16_GA8             = $04100000+PNGCP_16_8;
    50.   PNG_OUTF_GA16_G8              = $04100100+PNGCP_16_8_SA; (*DIB default*)
    51.   PNG_OUTF_TA8_TA8_BGRA     = $06080100+PNGCP_8_8_BGRA; (*DIB default*)
    52.   PNG_OUTF_TA8_T8_BGR       = $06080100+PNGCP_8_8_BGR_SA; (*DIB optional*)
    53.   PNG_OUTF_TA16_TA16_BGRA = $06100000+PNGCP_16_16_BGRA;
    54.   PNG_OUTF_TA16_T16_BGR     = $06100000+PNGCP_16_16_BGR_SA;
    55.   PNG_OUTF_TA16_TA8_BGRA    = $06100100+PNGCP_16_8_BGRA; (*DIB default*)
    56.   PNG_OUTF_TA16_T8_BGR      = $06100100+PNGCP_16_8_BGR_SA; (*DIB optional*)
    57.   PNG_OUTF_AUTO                     = -1;
    58. (******************************************************************************
    59.  Error codes
    60.  ******************************************************************************)
    61.   PNGLIB_ERR_OPENFILE               = $1000; (*Couldn't open file*)
    62.   PNGLIB_ERR_MEMALLOC               = $1001; (*Couldn't allocate memory*)
    63.   PNGLIB_ERR_ALREADY_LOADED     = $1002; (*Other data has already been loaded*)
    64.   PNGLIB_ERR_INVALIDPNG             = $2000; (*Corrupt or invalid PNG*)
    65.   PNGLIB_ERR_UNSUPPORTED            = $2001; (*PNG format not supported*)
    66.   PNGLIB_ERR_INVALIDFORMAT      = $2002; (*User error (!): Invalid format specified*)
    67.   PNGLIB_ERR_WRONGSTATE             = $2003; (*User error (!): Function call at the wrong time*)
    68.                                                                          (*(e.g. decoding before loading data)*)
    69.   PNGLIB_ERR_NOPALETTE              = $2004; (*Palette requested for a non-paletted image*)
    70.   PNGLIB_ERR_INVALIDPARAMETER = $2005; (*Invalid parameter used for function*)
    71.   PNGLIB_ERR_CREATEBITMAP       = $2006; (*Couldn't create bitmap*)
    72.   PNGLIB_ERR_FINDRESOURCE       = $3001; (*Couldn't find resource*)
    73.   PNGLIB_ERR_LOADRESOURCE       = $3002; (*Couldn't load resource*)
    74.  
    75.   PNG_PF_RGB    = 0; (*output: red byte, green byte, blue byte*)
    76.   PNG_PF_BGRX = 1; (*output: blue byte, green byte, red byte, zero byte*)
    77.  
    78.  
    79. type
    80.     LPPNGINFO = ^_PNGINFO;
    81.     _PNGINFO = packed record
    82.         iWidth: cardinal;           // Width of image
    83.         iHeight: cardinal;          // Height of image
    84.         dwLastError: cardinal;  // Last error code (PNGLIB_ERR_* )
    85.         nColors: cardinal;          // Number of palette entries, if present
    86.         PNGColorType: BYTE;         // Original PNG color type (PNG_CT_* )
    87.         PNGBitDepth: BYTE;          // Original PNG bit depth (bits/sample)
    88.         PNGInterlaced: BYTE;        // Interlace method (PNG_IM_* )
    89.     // The following structure members are used internally
    90.     // by PNGlib. You should not rely in any way on these values,
    91.     // nor assume they will be present in later versions.
    92.     // They are included *only* to reserve space for them.
    93.     lpPNGData: PByte;
    94.     lnPNGData: cardinal;
    95.     lpCurrent: PByte;
    96.     lpOutput: PByte;
    97.     lnOutput: cardinal;
    98.     pPNGPalette: PByte;
    99.     dwLoadType: cardinal;
    100.     pHeader: PByte;
    101.     pIDAT: PByte;
    102.     curState: cardinal;
    103. end;
    104.  
    105.  
    106. (******************************************************************************
    107.  Function declararations
    108.  ******************************************************************************)
    109.  
    110. function _PNG_Init(pPNGInfo: LPPNGINFO): bool; stdcall;
    111. function _PNG_Cleanup(pPNGInfo: LPPNGINFO): bool; stdcall;
    112. function _PNG_LoadFile(pPNGInfo: LPPNGINFO;  lpFileName: PChar): bool; stdcall;
    113. function _PNG_LoadResource(pPNGInfo: LPPNGINFO;  hInstance: HMODULE;  lpResName: PChar): bool; stdcall;
    114. function _PNG_LoadCustom(pPNGInfo: LPPNGINFO;  lpData: PByte;  lnData: cardinal): bool; stdcall;
    115. function _PNG_Decode(pPNGInfo: LPPNGINFO): bool; stdcall;
    116. function _PNG_GetPalette(pPNGInfo: LPPNGINFO;  lpOutput: pointer;  dwFormat: cardinal): bool; stdcall;
    117. function _PNG_OutputRaw(pPNGInfo: LPPNGINFO;  lpDest: PByte;  dwFormat: cardinal): bool; stdcall;
    118. function _PNG_CreateBitmap(pPNGInfo: LPPNGINFO;  hWndCompatible: HWND;  dwFormat: cardinal;  bDDB: bool): HBITMAP; stdcall;
    119.  
    120.  
    121.  
    122.  
    123. implementation
    124. {$L PNG_Init.obj}
    125. {$L adler.obj}
    126. {$L cdebug.obj}
    127. {$L CRC.obj}
    128. {$L data.obj}
    129. {$L helper.obj}
    130. {$L PNG_Cleanup.obj}
    131. {$L PNG_CreateBitmap.obj}
    132. {$L PNG_Decode.obj}
    133. {$L PNG_GetPalette.obj}
    134. {$L PNG_LoadCustom.obj}
    135. {$L PNG_LoadFile.obj}
    136. {$L PNG_LoadResource.obj}
    137. {$L PNG_OuputRaw.obj}
    138. {$L PNGI_BitmapInfo.obj}
    139. {$L PNGI_copymethods.obj}
    140. {$L PNGI_Decompress.obj}
    141. {$L PNGI_DeInterlaceProcs.obj}
    142. {$L PNGI_GenHufTable.obj}
    143. {$L PNGI_GetDecompressedSize.obj}
    144. {$L PNGI_GetNextChunk.obj}
    145. {$L PNGI_LoadHeader.obj}
    146.  
    147.  
    148. function _PNG_Init(pPNGInfo: LPPNGINFO): bool; stdcall; external;
    149. function _PNG_Cleanup(pPNGInfo: LPPNGINFO): bool; stdcall; external;
    150. function _PNG_LoadFile(pPNGInfo: LPPNGINFO;  lpFileName: PChar): bool; stdcall; external;
    151. function _PNG_LoadResource(pPNGInfo: LPPNGINFO;  hInstance: HMODULE;  lpResName: PChar): bool; stdcall; external;
    152. function _PNG_LoadCustom(pPNGInfo: LPPNGINFO;  lpData: PByte;  lnData: cardinal): bool; stdcall; external;
    153. function _PNG_Decode(pPNGInfo: LPPNGINFO): bool; stdcall; external;
    154. function _PNG_GetPalette(pPNGInfo: LPPNGINFO;  lpOutput: pointer;  dwFormat: cardinal): bool; stdcall; external;
    155. function _PNG_OutputRaw(pPNGInfo: LPPNGINFO;  lpDest: PByte;  dwFormat: cardinal): bool; stdcall; external;
    156. function _PNG_CreateBitmap(pPNGInfo: LPPNGINFO;  hWndCompatible: HWND;  dwFormat: cardinal;  bDDB: bool): HBITMAP; stdcall; external;
    157.  
    158.  
    159. function _wsprintf(Output: PChar; Format: PChar): Integer; stdcall; varargs; external 'user32.dll' name 'wsprintfA';
    160.  
    161. end.
    PS Что-то криво как-то тут форматирование выглядит...