COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
COM: can I see if there is an out-of-process reference to one of my COM objects? Can I release it?
>我有一个应用程序,它使外部客户端可以访问COM对象(通过在ROT中注册它(。
该对象使用 ATL 在C++中实现。
问题 1:是否可以确定对我的对象的引用之一是否来自进程外客户端?
动机:当外部引用被删除时,我需要释放一些相关对象(阻止某些操作(,即使外部引用意外死亡。我还想避免要求来电者"说再见"。
我在内部使用相同的接口,因此我无法为接口使用单独的引用计数。公开的接口是基于IDispatch
的,因此不会进行自定义封送处理。
问题 2:是否可以告诉进程外引用一个对象(和/或所有对象(该对象不再"活动"?强制进程外接口上的任何调用返回,例如RPC_E_DISCONNECTED
(与终止服务器进程后的方式相同,客户端会收到每个调用的RPC_E_SERVER_DIED
(。
动机:服务器的关闭过程可能由用户启动,可能需要一段时间。在此期间,来自外部客户端的所有调用都会被阻止;谨慎的做法是尽早通知他们呼叫不成功。
外部引用可以通过实现IExternalConnection来监视,当添加或删除外部连接时,您会被调用。
CoDisconnectObject 允许您告诉外部连接"消失"(尽管似乎外部调用方可能不会立即收到通知,但消息循环可能需要处于活动状态(。
相关文章:
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 我是否可以使用 win32 句柄以编程方式记录发送到/接收到 USB/COM 的内容
- 如果从函数返回指向指针 COM 对象的指针,我是否需要 AddRef()?
- 是否可以从资源文件指定要使用的 COM 对话框
- 是否有手动组织COM封送处理的方法
- 在运行时在v110可执行文件中使用v90 COM dll是否安全
- 检查 COM 指针是否存在
- 使用 COM 跨 CRT 边界调用是否安全
- 验证进程外的COM服务器客户端是否受信任
- 导入"RegExp.tlb" C++ COM 接口是否在进程之间隐式共享内存?
- COM(C++)对于AddRef和Release中的Thread Saftey来说,互锁API是否足够
- 是否有可能在静态库中编写COM代码,然后将其链接到DLL ?< / h1 >
- 使用全局对象作为COM类工厂是否合法
- 在调用COM Release()函数后,指针是否被设置为空?
- CoCreateInstance使用CLSCTX_LOCAL_SERVER是否足以确保所有应用程序将共享COM对象实例?
- 检查COM指针是否相等
- 对接口的Release调用是否确保COM组件不受信任
- 测试 CComPtr 在 COM 中是否为空
- 对于进程间COM对象,不使用QueryInterface,将IDispatch*转换为IUnknown*是否安全?
- 如何判断我是否泄漏了 COM 对象?