题
我创建使用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
其他提示
如果你打算从一个自动化的语言称呼它,你需要的界面返回从IDispatch接口导出,你可能需要作为一个IDispatch至少归还**。对于RETVAL我认为这是够好;为简单[OUT]参数需要它传递作为VARIANT *(具有设置为VT_LPDISPATCH所述变体类型),使得自动化语言可以理解这一点。
我不知道如果有一个很好的教程;因为我找了一个全面的参考它已经有一段时间。我可以给将是确保一切你传递的最好的建议是自动化兼容的(如:是,你可以放入VARIANT型),以及应采取的你的问题80%的照顾。这是非常可行的,虽然,刚读了MSDN上,你应该罚款。
不隶属于 StackOverflow