имеется структура,в составе которой нужно иметь несколько массивов вложенных структур сама структура - Код (Text): NetStreamConnectionstruc struc;-------------------------------------структура подключения NetName db 16 dup (" "),0 Myname db 16 dup (" "),0 hSocket dd ? IP db 16 dup (" "),0 THRID dd ? ConnectEVENT dd ? readEVENT dd ? disconnectEVENT dd ? WaitEVENT dd ? CV_SSTRING dd 6 CV_LSTRING dd 3 CV_INT dd 101 CV_DOUBLE dd 101 V_SSTRING _CL_ShortString_VAR <> V_LSTRING _CL_LongString_VAR <> V_INT _CL_INT_VAR <> V_DOUBLE _CL_DOUBLE_VAR <> NetStreamConnectionstruc ends;-------------------------------------конец структуры подключения чтобы сделать массив вложенных структур,были обьявлены структуры,вроде этой : Код (Text): _CL_ShortString_VAR struc CL_ShortString_VAR 10 dup ({}) _CL_ShortString_VAR ends сама CL_ShortString_VAR имеет вид: Код (Text): CL_ShortString_VAR struc;-------------------------------------начало структуры ValADDR dd ? updateEVENT dd ? sendingEVENT dd ? S_EOS db (" "),0;не используется len dd 100 ID dd 0 buffer db 100 dup (" "),0 key db 30 dup(" "),0 CL_ShortString_VAR ends;-------------------------------------конец структуры проблема в том,что код,которым я пытаюсь перебирать элементы такого массива,даёт неверный указатель: Код (Text): mov esi,WatchParam invoke GetOFFSET,type CL_ShortString_VAR,esi,addr WSSnumbuff mov esi,WSSnumbuff lea ebx,Connectionn.V_SSTRING[0] invoke SetEvent,(CL_ShortString_VAR ptr [esi+ebx]).updateEVENT;устанавливается событие - возвращается 6(неверный хендл)
это очень опасное объявление т.к. не содержит имени поля в хелпе masm 611 сказано что в таких случаях как yours struc byte 19 dup (?) yours ends действуют ограничения в связи с сложностью определения что к чему относится
эм,что ты имел ввиду под словами "и слишком просто вы пишите там конструкция с имя_структуры PTR должна быть вложенной"?
но это единственное работающее обьявление в данном случае в остальных случая получаю "Nested Structure Improperly Initialized" при попытке обьявить экземпляр структуры
arrrg простую вещь - нужно адрес получать поэтапно а не сразу как ты 1. загузил адрес самой общей стуктуры - проверил в отладчике 2. загузил адрес ее поля (массива) - проверил 3. загрузил адрес элемента массива - проверил 4 загрузил адрес поля элемента массива - опять проверил а уж потом в инвоке все это дело загонять
учитесь пользоваться <1,<>,<>,2,4> намек поняли ??? нет - тогда читайте справку там это дело подробно описано
оно работает - но в силу своей кривизны мешает работать остальным такие определения - гвоздь в жопе - об этом в хелпе тоже написано - читайте - снимите все вопросы
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>> все должно работать
во первых,зачем обьявлялась структура mysome во вторых,откуда взялся atitle и что он из себя представляет в третьих, мне нужен массив,а в твоём коде массива вродебы нету....
1. mysome появилась чтоб показать работу с вложенными структурами при инициализации переменных структурного типа 2. atitle переменная строка - введена для разнообразия (не суть важно поэтому только ссылка на нее) 3.массива нету - есть его упрощенная иммитация через два поля mysome_a mysome_b ИМХО попробуй сначало через имитацию а потом нужно смотреть справочник к masm 611 по вложенным в структуру массивам полей у меня щас его под рукой на работе нету дома вечером посмотрю
всё сделал как ты написал даже на калькуляторе высчитал указатели,написал отдельную функцию.пока ненадо,всё нормально,а как до дела доходит....
всё...оказывается я три дня нетам искал,а в этом месте код безупречен ^_^ спасибо что помог,ябы ошибку врятли нашёл)