Интересный глюк на fasm.Приколитесь.

Тема в разделе "WASM.BEGINNERS", создана пользователем 5555, 20 дек 2006.

  1. 5555

    5555 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2006
    Сообщения:
    9
    Коротенький пример простейшей программки типа хелло ворд.
    Если закоментировать бессмысленую строку:
    ; invoke SQLDisconnect, [hDlg]
    то ссука перестает запускаться. В принципе похрену.
    Нехай будет та строка, мать ее.

    Но рациональное объяснение очень хотелось бы услышать.

    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3. include '%fasminc%\win32a.inc'
    4. section '.data' data readable writeable
    5. hInstance dd ?
    6. section '.code' code readable executable
    7. start:
    8.   invoke GetModuleHandle, NULL
    9.   mov [hInstance],eax
    10.   invoke DialogBoxParam,[hInstance],100,0,DlgProc,0
    11.   invoke ExitProcess,eax
    12. proc DlgProc  hDlg,uMsg, wParam, lParam
    13.   cmp [uMsg],WM_CLOSE
    14.       je WMCLOSE
    15.     mov eax,FALSE
    16.     ret
    17.    WMCLOSE:
    18.     invoke EndDialog,[hDlg], 0
    19.   mov eax,TRUE
    20.   ret
    21.   invoke SQLDisconnect, [hDlg]
    22. endp
    23. section '.idata' import data readable writeable
    24.   library kernel32,'KERNEL32.DLL',\
    25.           user32,'USER32.DLL',\
    26.           odbc32,'odbc32.DLL'
    27.   include '%fasminc%\apia\kernel32.inc'
    28.   include '%fasminc%\apia\user32.inc'
    29.   import odbc32,SQLDisconnect,'SQLDisconnect'
    30. section '.rsrc' resource data readable
    31.     SSS   equ   'Достал!'
    32.     directory RT_DIALOG,dialogs
    33.     resource dialogs,100,25+1,suka
    34.     dialog suka,SSS,0, 0, 100, 40 ,DS_MODALFRAME+DS_CENTER + WS_SYSMENU,0,0,'Arial',10
    35.        dialogitem 'SysListView32','List1',1000,7,7,80,20,WS_BORDER + WS_TABSTOP+WS_VISIBLE
    36.     enddialog
     
  2. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    у меня запускается и так и так. но возможно дело в том что нада подзагрузить COMCTL32.dll можно просто вызывать заглушку InitCommonControls . но не факт что в этом дело.
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    вероятнее всего..
    odbc32.dll импортирует comctl32. Под XP все равно, а под 2k диалог перестанет создаваться.
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Почему это всё равно. Отнюдь.
     
  5. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    Код (Text):
    1. include '%fasminc%\encoding\win1251.inc'
    также не помешает для ресурсов на русском языке
     
  6. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    следующий глюк у тебя будет "не найдена метка", потому что внутри proc/endp метки нужно делать локальные (не WMCLOSE, а .WMCLOSE)
     
  7. 5555

    5555 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2006
    Сообщения:
    9
    to shoo
    Какая "не найдена метка"?
    Ты, читать умеешь?
    Все нормально работает.
    ********
    А про InitCommonControls в общем правильно.
     
  8. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    а сам ты читать умеешь? :) я написал "следующий глюк", т.е. "в будущем"
     
  9. 5555

    5555 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2006
    Сообщения:
    9
    И с чего это он будет в будущем.
    Нахрена мне 2 или три метки WMCLOSE?
     
  10. 5555

    5555 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2006
    Сообщения:
    9
    to shoo
    Эй умник!
    Примеры по fasm посмотри.
    Где там точки в метках внутри процедуры диалога?
     
  11. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    Код (Text):
    1. Эй умник!
    спасибо! я в курсе :)
    я то смотрел :) но не ставить точки чревато другим, но рассказывать почему - я тебе не буду :lol:
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    5555
    Спокойнее.
     
  13. cpp_and_wasm

    cpp_and_wasm Владимир

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    128
    По синтаксису FASM'a по-моему метка без предварительной точки считается как глобальная метка.
     
  14. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    5555
    если у тебя только один диалог - то не нужно, но если у тебя разные оконные процедуры для разных диалоговых окон, то дублирование глобальных меток ни к чему
    в принципе, когда тебе дают совет, то лучше подумать, чем он тебе может пригодиться и в каком случае он имеет смысл, а не отрицать очевидное

    в любом случае тебе стоит знать, что в фасме, в отличие от масма, метки без точки в начале - глобальные. на всякий случай.
     
  15. cpp_and_wasm

    cpp_and_wasm Владимир

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    128
    Метки с двумя точками вначале также глобальны
     
  16. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    метки с одной точкой в начале автоматически дописываются к текущей глобальной метке - этим обеспечивается их "видимость" только в области до следующей текущей глобальной метки.
    разница в том, что глобальная метка (метка без точек в начале) создает новую текущую глобальную метку, а с двумя точками - нет. т.е. грубо:
    Код (Text):
    1.      jmp .next
    2.     ...
    3. here:
    4.     ...
    5. .next:
    - здесь переход не сработает,
    Код (Text):
    1.      jmp .next
    2.     ...
    3. ..here:
    4.     ...
    5. .next:
    - а здесь - сработает.
    это очень важно, когда используются локальные метки в макросах. если они без точки (или двух) в начале - то они обрывают видимость текщей глобальной метки, поэтому рекомендую локальные метки в макросах предварять точками. например:
    :
    Код (Text):
    1. macro test_d {
    2.      local lbl
    3.      test eax,eax
    4.      jnz lbl
    5.      test edx,edx
    6. lbl:
    7. }
    8.  
    9.      jmp .next
    10.     ...
    11.     test_d
    12.     ...
    13. .next:
    - здесь переход не сработает, хотя метка lbl снаружи не будет видна. но если ее предварить точками - все будет нормально.
     
  17. 5555

    5555 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2006
    Сообщения:
    9
    to Shoo
    Ты, читать умеешь?
    Я написал:
    "Коротенький пример простейшей программки типа хелло ворд."
    Не будет в этом примере никогда никаких диалогов кроме одного. И меток тоже не будет. Ни с точками ни без.
    **************
    А весь смысл вопроса почему если использовать в диалоге контрол SysListView32 то проблема, а если только едиты и баттоны то нахрен comctl32 не нужен все запускается и так.
    **************
    Хотя и так понятно: "Патамушто надо подгружать библиотеку."
    А зачем так? - "А хрен его знает - патамушто."
     
  18. 5555

    5555 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2006
    Сообщения:
    9
    to Jupiter
    Спасибо, но я знаю про локальные и глобальные метки.
     
  19. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    5555
    ты грубый невоспитанный мальчик, я с тобой не разговариваю :) я разговаривал с другими. кстати, уметь читать полезно - можно, например, прочитать зачем нужна библиотека comctl32 - это очень просто.
     
  20. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    shoo

    не обижайся на него. потом он поймёт, что был не прав. ;)