Кусок кода: Код (Text): . . . . . lea eax, pFelDisp push eax ; IDispatch mov Form_Item_Var.vt, VT_I4 lea eax, iCount mov Form_Item_Var.lVal, eax lea eax, Form_Item_Var push eax ; name push eax ; index mov eax, pHEC push eax mov eax,[eax] call dword ptr (IHTMLElementCollectionVtbl ptr [eax]).item mov hr, eax .IF eax != S_OK . . . . . Подскажите пожалуйста, что в этом коде неправильно. В eax возвращается S_FALSE. Почему?
т.е. так: Код (Text): lea eax, pFelDisp push eax ; IDispatch mov Form_Item_Var.vt, VT_I4 lea eax, iCount mov Form_Item_Var.lVal, eax lea eax, Form_Item_Var push eax ; name и index mov eax, pHEC push eax mov eax,[eax] call dword ptr (IHTMLElementCollectionVtbl ptr [eax]).item mov hr, eax .IF eax != S_OK этот код верен? если нет. я прошу помочь мне. напиши пожалуйста правильный код. ок. заранее спасибо.
Структуры VARIANT копируются целиком, они вроде по 16 байт размером. То есть, копируешь либо так: Код (Text): pushvar macro varl:REQ push [varl+12] push [varl+08] push [varl+04] push [varl+00] endm .. lea eax, pFelDisp push eax ; IDispatch mov Form_Item_Var.vt, VT_I4 mov eax, iCount mov Form_Item_Var.lVal, eax pushvar Form_Item_Var ; name pushvar Form_Item_Var ; index mov eax, pHEC .. Либо через cld + rep movsd, но можно легко запутаться в адресах.
Добрый день. IceStudent, у меня по прежнему возвращает S_FALSE. Я пробовал делать как ты посоветовал. Но положительного результата нет. В чем дело? Я просто взамешательсте. Вот код: Код (Text): pushvar macro varl:REQ push [varl+12] push [varl+08] push [varl+04] push [varl+00] endm .............. lea eax, pFelDisp push eax mov Form_Item_Var.vt, VT_I4 lea eax, iCount mov Form_Item_Var.lVal, eax pushvar Form_Item_Var pushvar Form_Item_Var mov eax, pHEC push eax mov eax,[eax] call dword ptr (IHTMLElementCollectionVtbl ptr [eax]).item mov hr, eax .............. Почему в call dword ptr (IHTMLElementCollectionVtbl ptr [eax]).item мне возвращается S_FALSE. Посмотрите пожалуйста верен ли вобще мой код. Всё ли я сделал правильно для того чтобы получить get_action? Если есть ошибки исправьте пожалуйста и обьясните как будет верно. Заранее спасибо.
А для чего нужен этот форум? Для того чтобы помогать друг другу. Или я не прав? Я ведь не прошу написать мне готовую программу. Я прошу помочь мне найти и исправить ошибку в коде. Если ты не знаешь как мне помочь. То лучше вобще ничего не пиши.
Помогать newbie стать беспощадным даосом -- дело хорошее, но вот писать за кого-то программы -- уж извините. P.S. финт по делу: можно быстренько написать маленький сэмпл на С, скомпилировать его cl /Fa и посмотреть ассемблерный листинг -- все станет ясно. P.S.1 И не надо так орать, это вам не служба поддержки, толку от этого никакого не будет, один негатив.
у меня нет MSVC ( да и отношение к C у меня.... ). Если ты знаешь в чем дело. Помоги пожалуйста. Я уже и в ольге смотрел и куда только не лазил. Я запутался. И не могу понять где ошибка. Заранее спасибо.
asmic Почему в call dword ptr (IHTMLElementCollectionVtbl ptr [eax]).item мне возвращается S_FALSE. Например Код (Text): ... lea eax, iCount ;; !!! получить _адрес_, а надо значение mov Form_Item_Var.lVal, eax ...
Даже если я использую mov вместо lea, все равно возвращаемое значение S_FALSE. Почему так, что в моем коде неправильно. Подскажите пожалуйста.
Я видел эту ошибку. Я исправил lea eax, iCount на mov eax, iCount. Но все равно результат отрицательный. Так и не могу найти ошибку.
Всем добрый вечер. Я разобрался с проблеммой. Этот вариант работает: Код (Text): lea eax, pFelDisp push eax push 0 push 0 push 0 push 0 push 0 push iCount push 0 push 3 mov eax, pHEC push eax mov eax,[eax] call dword ptr (IHTMLElementCollectionVtbl ptr [eax]).item mov hr, eax Всем спасибо за вашу помощь.