我创建使用Visual Studio 2008和ATL一个COM对象。添加简单的属性和方法是很容易的,但现在我想要做更复杂的东西。我想给通过我的COM对象的属性访问C ++对象,所以我可以做这样的事情:

// 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

我只是碰到这种文章来了

HOWTO:实现在ATL 静态对象层次结构

这看起来很相似,我想实现。

其他提示

如果你打算从一个自动化的语言称呼它,你需要的界面返回从IDispatch接口导出,你可能需要作为一个IDispatch至少归还**。对于RETVAL我认为这是够好;为简单[OUT]参数需要它传递作为VARIANT *(具有设置为VT_LPDISPATCH所述变体类型),使得自动化语言可以理解这一点。

我不知道如果有一个很好的教程;因为我找了一个全面的参考它已经有一段时间。我可以给将是确保一切你传递的最好的建议是自动化兼容的(如:是,你可以放入VARIANT型),以及应采取的你的问题80%的照顾。这是非常可行的,虽然,刚读了MSDN上,你应该罚款。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top