Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 8 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Может я не совсем точно выразился, но нужно мне вот что. Есть интерфейс , назовем его IMyInterface у которого есть несколько методов. Как узнать адрес памяти , где они лежат? Имеется в виду адрес входной точки в эти методы. :) (сразу говорю в Си я не большой спец).



Партнер
 

Member
Статус: Не в сети
Регистрация: 20.02.2004
Откуда: Barnaul
Я в Си вообще не спец (то есть совсем :-) ), но я об этом читал изучая C# и .NET. Насколько я помню, в Си это называется функцией обратного вызова. Так что ищи по этой фразе (благо, доки по C++ завались).

Добавлено спустя 18 минут, 4 секунды:
В C# функции обратного вызова реализуются через механизм делегатов


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Spiny79715 Тут .NET с отсутвием указателей вообще в стороне :)
Я писал о конкретной точке входа в процедуру в памяти с тем, чтобы потом подменять (ассемлерной вставкой) эту процедуру. Все это никак не реашется средствами языка и уж тем более C# :)


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Текс, проблему решил, но малость не так как я хотел. Сейчас опишу, что я делал, может кто и поможет с более гибким применением.
И так, что по сути есть переменная в которой сидит интерфейс? Это указатель на указатель который указывает на область памяти где лежат адреса методов интерфейса. И зная порядковый номер нужного метода, узнать его адрес не составит труда. Но это в моем случае так! Нужный мне метод занимает 16 позицию это можно узнать из .h файла с описанием интерфейса.
Но как можно узнать этот же адрес, без знания порядкового номера метода? Вот в чем вопрос :) (хотя без .h файла работать с интерфейсом кажется не получится или я не прав?)


 

Member
Статус: Не в сети
Регистрация: 30.04.2004
Откуда: [Omsk Team]
перезадам вопрос:
есть
Код:
class IMyInterface
{
public:
         virtual void f1() = 0;
         virtual void f2() = 0; 
};

Нужно получить, к примеру, адрес f1() из виртуальной таблицы?

_________________
forum.omskteam.ru- Все о керамограните


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
я это и спрашивал, если нету описания в таком виде
Код:
DECLARE_INTERFACE_(MyInterface, IUnknown)
{
    /*** IUnknown methods ***/
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;
    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
    STDMETHOD_(ULONG,Release)(THIS) PURE;

    /*** my method methods ***/
    ..............
};

То как у знать я не знаю. А вот с таким описанием это просто делается. Вполне возможно , что и в твоем варианте f1 будет первой в списке, если твой интерфейс больше никаких интерфесов не реализует


 

Member
Статус: Не в сети
Регистрация: 30.04.2004
Откуда: [Omsk Team]
Ray Adams помнится читал об этом в какой-то из книжек по COM, приду домой, посмотрю, отпостю

_________________
forum.omskteam.ru- Все о керамограните


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Ну и как? Нашел?


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 8 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan