Всем привет! Собственно сабж. помогите решить эту задачу. скажем я определяю интерфейсы IShellWindows STRUCT DWORD IShellWindows_QueryInterface comethod3 ? IShellWindows_Release comethod1 ? IShellWindows_Invoke comethod9 ? IShellWindows_GetCount comethod2 ? IShellWindows ENDS как узнать по какому смещению находятся функции в виртуальной таблице? чтобы впоследствии можно было вызвать: ... ppd2 указатель определен mov edx,dword ptr [ppd2] mov edx,[edx] lea eax,tit push eax push dword ptr [ppd2] call dword ptr [edx+XXXXXXXXXX] ;IShellWindows->GetCount .. вот каким образом определить XXXXXXX ?? Ответьте или намекните где копать.. спасибо
Просто вызывая функцию через coinvoke не работает, хотелось бы все-таки узнать про смещения, как их правильно определить или создать самому
Ну размер каждого метода = sizeof(void *). Вот и считай. Про COM неплохо написано http://wasm.ru/article.php?article=1015001. Там как раз и найдешь про vtable. И вот тут: http://wasm.ru/article.php?article=1015003
Исправь на Код (Text): call dword ptr [edx+IShellWindows.IShellWindows_GetCount] и всё должно заработать. P.S. У тебя кстати AddRef пропущен (после QueryInterface).