[MASM32]массивы вложенных структур

Discussion in 'WASM.BEGINNERS' started by arrrg, Nov 1, 2009.

  1. arrrg

    arrrg New Member

    Blog Posts:
    0
    Joined:
    Jul 17, 2009
    Messages:
    124
    имеется структура,в составе которой нужно иметь несколько массивов вложенных структур

    сама структура -
    Code (Text):
    1. NetStreamConnectionstruc struc;-------------------------------------структура подключения
    2. NetName db 16 dup (" "),0
    3. Myname db 16 dup (" "),0
    4. hSocket dd ?
    5. IP db 16 dup (" "),0
    6. THRID dd ?
    7. ConnectEVENT dd ?
    8. readEVENT dd ?
    9. disconnectEVENT dd ?
    10. WaitEVENT dd ?
    11. CV_SSTRING dd 6
    12. CV_LSTRING dd 3
    13. CV_INT dd 101
    14. CV_DOUBLE dd 101
    15. V_SSTRING _CL_ShortString_VAR <>
    16. V_LSTRING _CL_LongString_VAR <>
    17. V_INT _CL_INT_VAR <>
    18. V_DOUBLE _CL_DOUBLE_VAR <>
    19. NetStreamConnectionstruc ends;-------------------------------------конец структуры подключения
    чтобы сделать массив вложенных структур,были обьявлены структуры,вроде этой :
    Code (Text):
    1. _CL_ShortString_VAR struc
    2.  CL_ShortString_VAR 10 dup ({})
    3. _CL_ShortString_VAR ends
    сама CL_ShortString_VAR имеет вид:
    Code (Text):
    1. CL_ShortString_VAR struc;-------------------------------------начало структуры
    2. ValADDR dd ?
    3. updateEVENT dd ?
    4. sendingEVENT dd ?
    5. S_EOS db (" "),0;не используется
    6. len  dd 100
    7. ID dd 0
    8. buffer db 100 dup (" "),0
    9. key db 30 dup(" "),0
    10. CL_ShortString_VAR ends;-------------------------------------конец структуры
    проблема в том,что код,которым я пытаюсь перебирать элементы такого массива,даёт неверный указатель:
    Code (Text):
    1. mov esi,WatchParam
    2. invoke GetOFFSET,type CL_ShortString_VAR,esi,addr WSSnumbuff
    3. mov esi,WSSnumbuff
    4. lea ebx,Connectionn.V_SSTRING[0]
    5. invoke SetEvent,(CL_ShortString_VAR ptr [esi+ebx]).updateEVENT;устанавливается событие - возвращается 6(неверный хендл)
     
  2. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2004
    Messages:
    2,625
    Location:
    Russia
    это очень опасное объявление т.к. не содержит имени поля
    в хелпе masm 611 сказано что в таких случаях
    как
    yours struc
    byte 19 dup (?)
    yours ends

    действуют ограничения в связи с сложностью определения что к чему относится
     
  3. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2004
    Messages:
    2,625
    Location:
    Russia
    и слишком просто вы пишите
    там конструкция с имя_структуры PTR должна быть вложенной
     
  4. arrrg

    arrrg New Member

    Blog Posts:
    0
    Joined:
    Jul 17, 2009
    Messages:
    124
    эм,что ты имел ввиду под словами "и слишком просто вы пишите там конструкция с имя_структуры PTR должна быть вложенной"?
     
  5. arrrg

    arrrg New Member

    Blog Posts:
    0
    Joined:
    Jul 17, 2009
    Messages:
    124
    но это единственное работающее обьявление в данном случае
    в остальных случая получаю "Nested Structure Improperly Initialized" при попытке обьявить экземпляр структуры
     
  6. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2004
    Messages:
    2,625
    Location:
    Russia
    arrrg
    простую вещь - нужно адрес получать поэтапно а не сразу как ты
    1. загузил адрес самой общей стуктуры - проверил в отладчике
    2. загузил адрес ее поля (массива) - проверил
    3. загрузил адрес элемента массива - проверил
    4 загрузил адрес поля элемента массива - опять проверил

    а уж потом в инвоке все это дело загонять
     
  7. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2004
    Messages:
    2,625
    Location:
    Russia
    учитесь пользоваться <1,<>,<>,2,4>
    намек поняли ??? нет - тогда читайте справку там это дело подробно описано
     
  8. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2004
    Messages:
    2,625
    Location:
    Russia
    оно работает - но в силу своей кривизны мешает работать остальным
    такие определения - гвоздь в жопе - об этом в хелпе тоже написано - читайте - снимите все вопросы
     
  9. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2004
    Messages:
    2,625
    Location:
    Russia
    mysize struc
    mysize_width byte ?
    mysize_height byte ?
    mysize ends

    mysome struc
    mysome_title dw ?
    mysome_a mysize <>
    mysome_b mysize <>
    mysome ends

    amysize mysize <offset(atitle),<>,<>>
    bmysize mysize <offset(atitle),<1,>,<,2>>
    сmysize mysize <offset(atitle),<1,2>,<1,2>>

    все должно работать
     
  10. arrrg

    arrrg New Member

    Blog Posts:
    0
    Joined:
    Jul 17, 2009
    Messages:
    124
    немного непонял,можно обьяснить?
     
  11. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2004
    Messages:
    2,625
    Location:
    Russia
    arrrg
    объяснить что ???
     
  12. arrrg

    arrrg New Member

    Blog Posts:
    0
    Joined:
    Jul 17, 2009
    Messages:
    124
    во первых,зачем обьявлялась структура mysome
    во вторых,откуда взялся atitle и что он из себя представляет
    в третьих, мне нужен массив,а в твоём коде массива вродебы нету....
     
  13. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2004
    Messages:
    2,625
    Location:
    Russia
    1. mysome появилась чтоб показать работу с вложенными структурами
    при инициализации переменных структурного типа

    2. atitle переменная строка - введена для разнообразия (не суть важно поэтому только ссылка на нее)

    3.массива нету - есть его упрощенная иммитация через два поля
    mysome_a mysome_b

    ИМХО попробуй сначало через имитацию а потом нужно смотреть справочник к masm 611 по вложенным в структуру массивам полей
    у меня щас его под рукой на работе нету дома вечером посмотрю
     
  14. arrrg

    arrrg New Member

    Blog Posts:
    0
    Joined:
    Jul 17, 2009
    Messages:
    124
    ну,со вложеными структурами проблем особых небыло
    а вот с массивом дело было хреново
     
  15. arrrg

    arrrg New Member

    Blog Posts:
    0
    Joined:
    Jul 17, 2009
    Messages:
    124
    всё сделал как ты написал
    даже на калькуляторе высчитал указатели,написал отдельную функцию.пока ненадо,всё нормально,а как до дела доходит....
     
  16. arrrg

    arrrg New Member

    Blog Posts:
    0
    Joined:
    Jul 17, 2009
    Messages:
    124
    а,во,нашёл ошибку
    какогото серна в esi появляется FFFFFF
     
  17. arrrg

    arrrg New Member

    Blog Posts:
    0
    Joined:
    Jul 17, 2009
    Messages:
    124
    всё...оказывается я три дня нетам искал,а в этом месте код безупречен ^_^
    спасибо что помог,ябы ошибку врятли нашёл)