У меня есть указатель на COM-объект pfoo реализует IFoo. Я хотел бы получить адрес pfoo-> Bar(), один из методов IFoo. Поскольку объекты COM хорошо документированы, это должно быть довольно легко. И на самом деле. Если Bar() есть, скажем, пятый метод в интерфейсе (учет, конечно, для методов IUnknown), адрес может быть извлечен из виртуальные таблицы сКак я могу получить адрес функции-члена COM-объекта?
(*(void***)(pfoo))[5]
мой вопрос, есть ли способ сделать это без необходимости использовать «5»? Похоже, что ошибки должны подсчитывать методы. Я хочу использовать только имя метода. Я не возражаю, если это немного сложно; все равно все идет в макрос. Итак, мой последний вопрос: существует ли макрос, который принимает параметры pfoo, Bar и, возможно, IFoo, и оценивает выражение выше?
Может ли быть так, что вы действительно хотите реализовать IDispatch? –
C++, похоже, не хочет, чтобы вы фиксировали указатель на функцию-член из экземпляра класса. Вы должны иметь доступ к классу, который реализует IFoo, тогда вы можете сказать 'auto pBar = & CFoo :: Bar;'. Учитывая, что он не примет '& pFoo-> Bar', нет возможности построить макрос, который не принимает порядковый номер метода. –