我正在拖出activeX控件。在拖动时,我提供了CComQIPtr,它实现了COM方法以将信息传递给放置目标。在drop,drop目标的进程调用我的COM方法来获取信息。
我是否不允许在接口边界附近使用CRT类型或 附近的CRT类型?我希望我的IDataObject有一个私有的std :: list和一些std :: strings,并且在接口的异端可以调用我的COM方法来访问那些私有成员。
我认为没关系,因为我实际上并没有传递 CRT类型。
MSDN: Potential Errors Passing CRT Objects Across DLL Boundaries
答案 0 :(得分:2)
您可以在com对象的实现中使用您喜欢的任何内容,因为它始终保留在创建它的进程(或dll)中。
您需要坚持COM接口中的COM类型,以便可以在使用对象的进程和创建对象的进程之间编组类型。
你是对的。那篇文章并不适用于这种情况,因为你没有在边界上传递任何东西。 COM基础结构处理为您跨越边界编组COM类型。
请确保捕获COM方法中的所有异常,因为COM基础结构不知道如何处理它们,所以不能让它们泄漏出来。
就个人而言,我倾向于有一层薄的COM代码来处理COM类型和“普通”类型之间的转换,然后调用执行实际工作的代码(参见here)。该层包含一个异常处理程序,它捕获所有内容并转换为适当的HRESULT。