ATL收集非平凡的物体

时间:2009-02-24 18:51:03

标签: c++ atl collections

我想公开一个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_;
};

1 个答案:

答案 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;封装在他们身上。