【发布时间】:2010-11-30 23:53:44
【问题描述】:
我有一个 ATL C++ 进程内 COM 组件。此组件不供外部使用 - 我只需要在我们的应用程序中使用它。
有时用户将其放入 COM+ 中,这会导致各种奇怪的错误——“访问被拒绝”等我不想听到的。最好的方法是禁止将组件放入 COM+ 中,这样它就只能用作进程内服务器。有没有办法做到这一点?
【问题讨论】:
标签: windows com interop com-interop atl
我有一个 ATL C++ 进程内 COM 组件。此组件不供外部使用 - 我只需要在我们的应用程序中使用它。
有时用户将其放入 COM+ 中,这会导致各种奇怪的错误——“访问被拒绝”等我不想听到的。最好的方法是禁止将组件放入 COM+ 中,这样它就只能用作进程内服务器。有没有办法做到这一点?
【问题讨论】:
标签: windows com interop com-interop atl
您是否只实现自己的接口?如果是这样,您应该可以在 IDL 中将它们标记为“[local]”,然后将模块中的所有编组信息(类型库、P/S)等剥离。
如果没有可用的编组基础,COM+ 应该无法注册该模块。 COM+ 的拦截机制依赖于强制对象进入远程上下文并进入代理和存根及其对应方之间。因此,如果您删除所有编组的机会,它应该无法拦截您的接口方法。
【讨论】:
阻止注册您的模块已完成,然后按照本文Creating COM objects directly from the dll 中所述使用您的DLL。
【讨论】: