【发布时间】:2012-06-05 02:35:49
【问题描述】:
通常要创建 COM 接口,应在 IDL 文件中声明它。在我从事的项目中,我在 C++ 的 *.h 文件中声明了一个 COM 接口:
struct DECLSPEC_UUID("A67177F7-A4DD-4A80-8EE1-25CF12172068") ISomeService : public IUnknown
{
virtual ~ISomeService() {}
virtual HRESULT Initialize(const Settings& settings) = 0;
// ...
};
此外,Initialize 方法采用包含 std::string 字段的结构作为其参数。 相应的 COM 类是用 C++ 实现的,并且可以从另一个 C++ 模块中使用。 这工作正常,直到我在 AppVerifier 下运行代码。它会导致发生访问冲突异常。
所以我的问题是
- 有时在 *.h 文件中声明 COM 接口是否正确?
- 如果是,是否可以将 C++ 类型指定为 COM 接口方法的参数?或者在这种情况下我应该始终使用符合 COM 标准的类型(BSTR 等)吗?
【问题讨论】:
-
我从未见过只在 .h 文件中定义的 COM 接口。 CoClass 在哪里定义?无论如何,如果您使用的是自定义类,COM 应该知道这个类,以便它可以编组这个类,以便数据从调用者正确传递到被调用方法。请参阅此链接 (progtutorials.tripod.com/COM.htm) 中的第 5.5 节,了解如何实现此目的。
-
@Unni:为什么要有
coclass?这是一个界面。
标签: c++ com marshalling