Image List проблема

Тема в разделе "WASM.WIN32", создана пользователем zaqer, 10 июл 2008.

  1. zaqer

    zaqer New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2008
    Сообщения:
    22
    Поскажите в чем проблема?
    необходимо создать Image List
    ;-----------------------
    call InitCommonControls
    push 0
    push 3
    push ILC_MASK
    push 16
    push 16
    call ImageList_Create
    ;---------------------------
    выдает сообщение под отладчиком: ERROR_NOTENOGH_MEMORY
    В SDK приведен слеующий пример :
    extern int g_nBird, g_nTree;

    #define CX_ICON 32
    #define CY_ICON 32
    #define NUM_ICONS 3

    HIMAGELIST AddIconsToImageList(HINSTANCE hinst)
    {
    HIMAGELIST himlIcons; // handle to new image list
    HICON hicon; // handle to icon

    // Ensure that the common control DLL is loaded.
    InitCommonControls();

    // Create a masked image list large enough to hold the icons.
    himlIcons = ImageList_Create(CX_ICON, CY_ICON, ILC_MASK, NUM_ICONS, 0);

    // Load the icon resources, and add the icons to the image list.
    hicon = LoadIcon(hinst, MAKEINTRESOURCE(IDI_BIRD));
    g_nBird = ImageList_AddIcon(himlIcons, hicon);

    hicon = LoadIcon(hinst, MAKEINTRESOURCE(IDI_TREE));
    g_nTree = ImageList_AddIcon(himlIcons, hicon);

    return himlIcons;
    }
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    У меня работает нормально, возвратился не ноль. Правда на С++, но погоды не меняет.
     
  3. zaqer

    zaqer New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2008
    Сообщения:
    22
    На С++ может и работает а на asme? Просто очень много нюансов, многие структуры и переменные для АПИ
    должны быть static что означает невозможность использованния стека для их создания и тд. тп. и нигде эти нюансы не описанны хотя возможно системный глюк? Если кто знает в чем дело подскажите плз.
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ну вот и на масме попробовал, работает.
    Код (Text):
    1. .386P
    2. ;¯«®áª ï ¬®¤¥«ì
    3. .MODEL FLAT, STDCALL
    4. ;¯à®â®â¨¯ë ¢­¥è­¨å ¯à®æ¥¤ãà
    5.   EXTERN MessageBoxA@16:NEAR
    6.   EXTERN ExitProcess@4:NEAR
    7.   EXTERN InitCommonControls@0:NEAR
    8.   EXTERN ImageList_Create@20:NEAR
    9. ;¤¨à¥ªâ¨¢ë ª®¬¯®­®¢é¨ªã ¤«ï ¯®¤ª«î祭¨ï ¡¨¡«¨®â¥ª
    10.   INCLUDELIB d:\masm32\lib\user32.lib
    11.   INCLUDELIB d:\masm32\lib\kernel32.lib
    12.   INCLUDELIB d:\masm32\lib\shell32.lib
    13.   INCLUDELIB d:\masm32\lib\shell32.lib
    14.   INCLUDELIB d:\masm32\lib\comctl32.lib
    15. ;-----------------------------------------------
    16. ;ᥣ¬¥­â ¤ ­­ëå
    17. _DATA SEGMENT DWORD PUBLIC USE32 'DATA'
    18. _DATA ENDS
    19. ;ᥣ¬¥­â ª®¤ 
    20. _TEXT SEGMENT DWORD PUBLIC USE32 'CODE'
    21. START:
    22.   CALL InitCommonControls@0
    23.   PUSH 0
    24.   PUSH 3
    25.   PUSH 1
    26.   PUSH 16
    27.   PUSH 16
    28.   CALL ImageList_Create@20
    29.   PUSH 1
    30.   CALL ExitProcess@4
    31. _TEXT ENDS
    32. END START
    Это не китайски - это дос кодировка. InitCommonControls@0 конечно надо было после ExitProcess@4 всунуть, но решил не портить чистоту эксперимента. В EAX не ноль.
     
  5. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    zaqer
    Откуда значение ERROR_NOTENOGH_MEMORY? Если просто видно под отладчиком, но функция вернула ненулевой хэндл, то попробуй использовать этот хэндл далее.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    AsmGuru62
    Меня это тоже удивило, скорее всего косяк в другом месте.