c++ - 非平凡对象的 ATL 集合

标签 c++ atl collections

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

最佳答案

Google 在 ATL 中实现 IEnumVARIANT。

这里有一些有希望的链接。

http://msdn.microsoft.com/en-us/library/3stwxh95.aspx

http://www.codeguru.com/cpp/com-tech/atl/misc/article.php/c29

希望这对您有所帮助。

回复您的评论: 是的。如果你想公开自动化兼容接口(interface),即那些可以被 VB、C# 和脚本语言使用的接口(interface),每个对象都必须作为 COM 接口(interface)公开。此外,如果您要将 CComPtr<> 存储在 STL 列表中,请确保对它们使用 CAdapt<> 包装器。

关于c++ - 非平凡对象的 ATL 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/583056/

相关文章:

c++ - 如何获取 ATL DLL 中的 HWND(用于 SendMessage 或 PostMessage)

c++ - 是否有 Windows API 来自动设置 16 字节数组?

c++ - 使用 Eigen + Intel MKL + Pardiso

c++ - 为什么不扩展可变参数模板参数包?

list - 从 List 中获取前 n 个元素

swift - 在 Swift 中按类型和属性对异构集合进行排序

collections - 使用泛型创建集合对象

c++ - Qt DBus 监视器方法调用

c++ - MIDL 更改接口(interface)名称

c++ - 强制资源从非 mfc 应用程序中的 dll 加载的 WTL 方式? (我们使用的是 WTL/ATL,而不是直接的 win32)