在 C++ 中声明的 COM 接口
COM interfaces declared in C++
通常要创建COM接口,应该在IDL文件中声明它。在我从事的项目中,我有一个 COM 接口在 *.h 文件中声明C++:
struct DECLSPEC_UUID("A67177F7-A4DD-4A80-8EE1-25CF12172068") ISomeService : public IUnknown
{
virtual ~ISomeService() {}
virtual HRESULT Initialize(const Settings& settings) = 0;
// ...
};
此外,方法初始化采用包含 std::string 字段的结构作为其参数。相应的 COM 类在 C++ 中实现,并从另一个 C++ 模块使用。这工作正常,直到我在AppVerifier下运行代码。它会导致发生访问冲突异常。
所以我的问题是
- 有时在 *.h 文件中声明 COM 接口是否正确?
- 如果是,将C++类型指定为 COM 接口方法的参数是否正确?还是在这种情况下我应该始终使用 COM 兼容类型(BSTR 等)?
-
当然,您可以在不使用 IDL 的情况下描述 COM 接口。但是,您将无法使用诸如类型库和编组代码生成之类的 IDL 功能。但是,如果您仅将 COM 组件用作进程内服务器 (DLL),并且可以将 .h 文件分发到客户端 - 那么此方法将正常工作。
-
避免在接口中使用C++类型,因为在跨 DLL 边界处理内存时可能会导致访问冲突。最好使用普通 C 类型或 COM 类型
相关文章:
- COM 接口 c# 封送数组数组
- 如何通过COM接口将64位整数从C++发送到C#
- 如何在C++中用属性声明COM接口
- 从 COM 接口中的函数返回多个值
- 使用带有COM接口的STL智能指针
- 将指向COM接口指针的指针从托管c++传递到.NET c#
- 当从一个应用程序调用时,在DLL方法中创建COM接口指针是有效的,但当从另一个应用软件调用时则无效
- 创建 COM 接口指针在开发计算机上有效,但会导致其他计算机上的应用程序崩溃
- 如何用C 包裹的COM接口部署C#库
- 从未通过 C# 注册C++ COM 服务器访问 COM 接口
- 如何将共享_ptr用于com接口指针
- hook COM接口抛出vTable
- 为什么 COM 接口协定不可变
- 我可以在Qt应用程序中使用现有的本机Windows COM接口吗
- 为什么MS Word在我发布最后一个COM接口后没有关闭?
- 将COM接口指针传递给函数
- VDS(虚拟磁盘服务)COM接口通知-仅在注销期间调用回调(接收器)(Unadvise)
- 有没有办法将 COM 接口 GUID 转换为接口的字符串名称
- 在 C++ 中声明的 COM 接口
- 嵌入 Chakra JavaScript 引擎无法初始化 COM 接口