我有一个使用 COM 库的应用程序,只是想知道我如何知道该应用程序是将该 COM 库用作 LocalServer 还是 In-Proc?
我查看了以这种方式构造的代码:
DATCOMLib::ITEmulationPtr pTE(__uuidof(DATCOMLib::TEmulation));
这部分取决于您在创建对象时提供的执行上下文 - 有关更多详细信息,请参见此处:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms693716(v=vs.85)。 aspx
您可以在注册表中查找组件的类 ID,并检查它是否具有 LocalServer 子键。所以在你的情况下,你会寻找:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CLSID of DATACOMLib::TEmulation}\LocalServer
如果它是 In Proc COM 组件,它将具有以下键:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CLSID of DATACOMLib::TEmulation}\InProcServer32
查看此文档以获取更多详细信息:http: //msdn.microsoft.com/en-us/library/aa908849.aspx
可以通过多种方式找出
通过查看代码 - 检查调用“ CreateInstance ”或“ CoCreateInstance ”时传递的类上下文是什么 -(CLSCTX_INPROC_XXXX 然后它是 inproc 服务器意味着它将被加载到调用应用程序进程地址空间的 DLL。CLSCTX_LOCAL_SERVER,CLSCTX_REMOTE_SERVER - 然后它是作为单独进程运行的 COM 服务器。有一些 #defines 结合了一个或多个标志。只需谷歌它)
ITEmulationPtr.CreateInstance(uuid(TEmulation), 0, CLSCTX_XXX)
如果您可以访问安装了 COM 组件的机器,那么您可以按照 Peter 在上述答案中给出的步骤进行操作