windows - 跨进程边界的 CRT 类型

标签 windows com winapi stl crt

我正在拖/放 activeX 控件。在拖动时,我提供了一个 CComQIPtr,它实现了 COM 方法以将信息传递给放置目标。在放置时,放置目标的进程调用我的 COM 方法来获取信息。

我是否不允许在该接口(interface)边界附近使用 CRT 类型或指向 CRT 类型的指针?我希望我的 IDataObject 有一个私有(private)的 std::list 和一些 std::strings,并且在接口(interface)的外部能够调用我的 COM 方法来访问那些私有(private)成员。

我认为这没问题,因为我实际上并没有越过边界传递 CRT 类型。

MSDN: Potential Errors Passing CRT Objects Across DLL Boundaries

最佳答案

您可以在 com 对象的实现中使用任何您喜欢的东西,因为它始终保留在创建它的进程(或 dll)中。

您需要坚持 COM 接口(interface)中的 COM 类型,以便可以在使用对象的进程和创建对象的进程之间对类型进行编码。

你是对的。该文章不适用于这种情况,因为您没有越过边界传递任何东西。 COM 基础结构负责为您跨越边界编码 COM 类型。

只要确保您捕获了 COM 方法中的所有异常,就不能让它们从函数中泄漏出来,因为 COM 基础结构不知道如何处理它们。

就我个人而言,我倾向于使用一个薄薄的 COM 代码层来处理 COM 类型和“普通”类型之间的转换,然后调用执行实际工作的代码(请参阅 here)。该层包括一个异常处理程序,它捕获所有内容并转换为适当的 HRESULT。

关于windows - 跨进程边界的 CRT 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3187640/

相关文章:

python - Windows 版 Python 中的控制台输入历史记录存储在哪里?

c++ - 获取辅助硬盘的空间 - C++

c++ - Win32 API C++,未使用 WM_COMMAND 接收到标识符

windows - OpenCV CVShow图像无法获得焦点

windows - 任何限制物理内存使用的方法? (页面文件OK)

c# - Windows 窗体中的默认按钮点击(试图找到最佳解决方案)

SharePointOnlineCredentials 引发 ComException

python - 如何使用python创建com对象

c++ - 为具有一种方法的 IE 编写一个简单的 ActiveX 控件

c - 保持 HOOK 运行