c++ - 在 ATL 中将对象作为属性返回

标签 c++ atl

我正在使用 Visual Studio 2008 和 ATL 创建一个 COM 对象。添加简单的属性和方法很容易,但现在我想做一些更复杂的事情。我想通过我的 COM 对象的属性授予对 C++ 对象的访问权限,因此我可以执行以下操作:

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

因此,aProperty 返回对另一个对象的引用,该对象公开名为 anotherProperty 的属性。

我猜想我需要为第二个对象(将其称为 IClass2)添加另一个简单的 ATL 对象到我的项目中,并且在 IDL 中有如下内容:

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

我走在正确的轨道上吗?有谁知道这类事情的好教程吗?

最佳答案

如果您要从自动化语言调用它,则需要返回从 IDispatch 派生的接口(interface),并且您可能需要至少将其作为 IDispatch** 返回。对于 retval,我认为这已经足够了;对于简单的 [out] 参数,您需要将其作为 VARIANT* 传递(变体类型设置为 VT_LPDISPATCH),以便自动化语言可以理解它。

不知道有没有好的教程;我已经有一段时间没有寻找全面的引用资料了。我能给出的最好建议是确保您传递的所有内容都与自动化兼容(例如:是一种您可以放入 VARIANT 的类型),这应该可以解决您 80% 的问题。不过,这是非常可行的;只需阅读 MSDN,您应该没问题。

关于c++ - 在 ATL 中将对象作为属性返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/651060/

相关文章:

c++ - 返回其参数或检查 nullptr 的函数

c++ - 如何创建一个在满足条件之前不会停止的循环

c++ - 神秘的全局变量 - COM/STA 单元对象

c++ - 奇怪的双指针空检查

c++ - 如何获取 ATL DLL 中的 HWND(用于 SendMessage 或 PostMessage)

c++ - 使用重载运算符 + 返回具有不可访问地址的指针

c++ - 如何使用 Qt 从特定点(时间码)播放声音?

c++ - C++中子类的对象是如何分配的?

c++ - ATL COM 对象是否有消息泵?

c++ - 我可以使用 WRL 编写 COM 服务器吗?