gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:12:39 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com