我对Microsoft COM技术并不是很熟悉。简而言之,我有一个在可执行文件foo.exe
中实现的Microsoft Out-of-process COM Server。环境是C++和Microsoft基础类框架(MFC)。如何识别Microsoft COM-Server的客户端是否在进程外或进程内?
有一个客户端bar.exe
它使用foo.exe中的功能通过Microsoft COM技术。在foo.exe中,有一些动态链接库也使用COM服务器foo.exe提供的功能(例如fooBar.dll
)。
到目前为止这么好。我正在寻找一种方法来确定COM服务器foo.exe的客户端是否位于其他进程中,或者甚至与foo.exe相同,如上例中的fooBar.dll。有谁知道这样的方式?
编辑: 随着换句话说:明显COM服务器foo.exe
可以作为同进程或进程外的一个COM服务器采取行动。要添加Hans Passant的评论以及Joe Willcoxson的回答,他提议通过GetModuleHandle
来解决调用DLL,以确定COM服务器当前是否作为进程内服务器运行,以防万一当我得到该句柄并且在我没有得到作为进程外服务器的句柄。因此,当COM服务器意识到在同一进程中使用来自该服务器的功能的知名DLL时,我们可以说COM服务器在此刻作为进程内服务器而在其他情况下作为out-of进程服务器。我是否误解了某些内容或者这些考虑是否正确?
我目前的调查并不值得提及,所以我希望社区中有一位知道手推车运行情况的微软COM专家。
非常感谢您的帮助!
拥有一个有效的接口指针,你不应该打扰谁精确地实现它,特别是如果你不直接与服务器通信,那么你可以与代理交谈。也就是说,没有标准的方法,但是你可以查询一些已知的不能跨进程边界进行可伸缩的接口,并且在你得到指针的情况下,你知道服务器在这个过程中。 –
这个问题没有意义,进/出进程中的条款仅适用于服务器。客户端代码始终处于其自己的过程中。 –
你是说服务器(而不是客户端)加载一个DLL,然后转向并调用同一台服务器上的方法?无论如何,你为什么关心谁在调用这个方法?你想要解决什么实际问题? –