我想公开一个 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/