我想公开一个CMainClass对象的ATL COM集合 这样它就可以被C#,VB或C ++客户端访问。
我自己设置集合没有问题,但我没有 知道如何允许COM客户端访问类A,B和C. 我应该制作A,B和A C COM对象包含一个 的std ::列表<>每个ATL收藏本身就是什么?
有更简单的方法吗?!?!
谢谢, PaulH
class C
{
public:
// get/set functions...
protected:
std::string str1_;
std::list< std::string > list1_;
};
class A
{
public:
// get/set functions...
protected:
std::list< C > list1_;
};
class B
{
public:
// get/set functions...
protected:
std::string str1_;
std::string str2_;
};
class CMainClass
{
public:
void GetA( A* a ) const;
void SetA( const A& a );
void GetB( B* b ) const;
void SetB( const B& b );
protected:
A a_;
B b_;
};
答案 0 :(得分:2)
Google在ATL中实施IEnumVARIANT。
以下是一些有前景的链接。
http://msdn.microsoft.com/en-us/library/3stwxh95.aspx
http://www.codeguru.com/cpp/com-tech/atl/misc/article.php/c29
希望这有帮助。
回应你的评论: 是。如果要公开自动化兼容接口,即可以由VB,C#和脚本语言使用的接口,则必须将每个对象公开为COM接口。此外,如果您要存储CComPtr&lt;&gt;在stl列表中,请确保使用CAdapt&lt;&gt;封装在他们身上。