【发布时间】:2013-06-21 04:33:40
【问题描述】:
我是带有 v110_xp 工具集的 Visual Studio 2012 Pro。我想在 COM 类中“转换”我的 c++ 动态库。该库的结构是这样的:
struct A;
struct B;
class IClass {
public:
virtual ~IClass() = 0;
virtual A doA() = 0;
virtual B doB() = 0;
virtual void getA( A& a ) = 0;
virtual void getB( B& b) = 0;
};
inline IClass::~IClass() {}
typedef std::unique_ptr< IClass > IClassPtr;
API_LIB IClassPtr ClassCreate( /* param */ );
现在所有方法和函数都可以抛出一个派生自 std::exception 的类(析构函数除外)。
我想让它成为一个 COM 类,这样我就可以在 C# 中使用它。实现这一目标的最快方法是什么? ATL 可以提供帮助吗?有人知道一些教程或书籍。我没有 COM 经验。
【问题讨论】:
-
你应该从右端开始:创建一个新的 ATL COM 项目,在那里添加 COM 类。你有向导,你可以找到这方面的教程。
-
如果您只是希望能够从 C++/CLI 调用 C++,可能比编写 COM 组件更容易。
-
A 和 B 长什么样。除非它们是 POD 结构,否则不能将它们直接传递给 C#。可以显示 A 和 B 吗?
-
它们包含复杂的数据结构...例如 A 定义为:
class A : private std::bitset< 16 >,B 例如包含 std::vector 和 std::string 作为数据成员