Возврат объекта как свойства в ATL - PullRequest
1 голос
/ 16 марта 2009

Я создаю COM-объект, используя Visual Studio 2008 и ATL. Добавить простые свойства и методы достаточно просто, но теперь я хочу сделать что-то более сложное. Я хочу предоставить доступ к объекту C ++ через свойство моего COM-объекта, чтобы я мог сделать что-то вроде:

// Pseudo-code
var obj = CreateObject("progid");
obj.aProperty.anotherProperty = someValue;

Итак, aProperty возвращает ссылку на другой объект, который предоставляет свойство с именем anotherProperty.

Я предполагаю, что мне нужно добавить еще один простой объект ATL в мой проект для второго объекта (назовите его IClass2), и в IDL есть что-то вроде следующего:

[propget, id(1)] HRESULT aProperty([out, retval] IClass2** ppValue);

Я на правильном пути? Кто-нибудь знает хороший учебник для такого рода вещей?

Ответы [ 2 ]

2 голосов
/ 16 марта 2009

Если вы собираетесь вызывать его из языка автоматизации, вам потребуется интерфейс, возвращаемый из IDispatch, и вам, вероятно, придется возвращать его хотя бы в виде IDispatch **. Для ретваля я думаю, что этого достаточно; для простых [out] параметров вам нужно передать его как VARIANT * (с типом варианта, установленным в VT_LPDISPATCH), чтобы язык автоматизации мог его понять.

Я не уверен, есть ли хороший учебник; Прошло много времени с тех пор, как я искал исчерпывающую ссылку. Лучший совет, который я могу дать, это убедиться, что все, что вы передаете, совместимо с автоматизацией (например, это тип, который вы можете поместить в VARIANT), и это должно решить 80% ваших проблем. Это очень выполнимо, хотя; просто прочитайте на MSDN, и все будет в порядке.

1 голос
/ 17 марта 2009

Я только что наткнулся на эту статью:

HOWTO: реализовать статические иерархии объектов в ATL

Это выглядит очень похоже на то, чего я пытаюсь достичь.

...