【问题标题】:ATL Collection of non-trivial objects非平凡对象的 ATL 集合
【发布时间】:2010-10-09 15:26:33
【问题描述】:

我想公开一个 CMainClass 对象的 ATL COM 集合 这样它就可以被 C#、VB 或 C++ 客户端访问。

设置集合本身没有问题,但我没有 知道如何允许 COM 客户端访问 A、B 和 C 类。 我是否应该使用包含 a 的对象来制作 A、B 和 C COM 对象 std::list 每个 ATL 集合各自对吗?

有更简单的方法吗?!?!

谢谢, 保罗H

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_;
};

【问题讨论】:

    标签: c++ atl collections


    【解决方案1】:

    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 存储在 stl 列表中,请确保对它们使用 CAdapt 包装器。

    【讨论】:

    • 因此,除非我误解了这些示例,否则答案似乎是“是”,每个类都需要是 COM 对象,而具有 std::list 成员的类必须是 COM收藏。
    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2014-11-19
    • 2015-12-26
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多