过程边界的CRTtypes

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

我不允许接口边界附近使用CRTtypes或指向CRTtypes的指针吗? 我喜欢我的IDataObject有一个私人的std ::列表和一些std ::string,并在接口的外部能够调用我的COM方法,可以访问这些私人成员。

我认为这是可以的,因为我并没有真正 CRTtypes通过边界。

MSDN:跨越DLL边界传递CRT对象的潜在错误

Solutions Collecting From Web of "过程边界的CRTtypes"

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

您需要在COM接口中使用COM类型,以便可以在使用对象的过程和创建对象的过程之间编组类型。

你是对的。 那篇文章不适用于这种情况,因为你没有通过任何东西跨越边界。 COM基础结构处理跨越边界为您编组COM类型。

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

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