8

我有一个使用 COM 库的应用程序,只是想知道我如何知道该应用程序是将该 COM 库用作 LocalServer 还是 In-Proc?

我查看了以这种方式构造的代码:

DATCOMLib::ITEmulationPtr pTE(__uuidof(DATCOMLib::TEmulation));
4

3 回答 3

1

这部分取决于您在创建对象时提供的执行上下文 - 有关更多详细信息,请参见此处: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

于 2013-04-06T14:35:55.970 回答
1

可以通过多种方式找出

  1. 通过查看代码 - 检查调用“ CreateInstance ”或“ CoCreateInstance ”时传递的类上下文是什么 -(CLSCTX_INPROC_XXXX 然后它是 inproc 服务器意味着它将被加载到调用应用程序进程地址空间的 DLL。CLSCTX_LOCAL_SERVER,CLSCTX_REMOTE_SERVER - 然后它是作为单独进程运行的 COM 服务器。有一些 #defines 结合了一个或多个标志。只需谷歌它)

    ITEmulationPtr.CreateInstance(uuid(TEmulation), 0, CLSCTX_XXX)

  2. 如果您可以访问安装了 COM 组件的机器,那么您可以按照 Peter 在上述答案中给出的步骤进行操作

于 2013-07-05T06:47:17.377 回答
0
  1. 运行您的应用程序并确保它加载 COM 对象(代码到达问题中显示的部分)
  2. 打开进程资源管理器(如果您还没有,请从 Microsoft 获取)
  3. 使用进程资源管理器搜索 dll 名称,如果它在您的 exe 中,则它在进程内,否则不是。
于 2013-03-26T02:58:44.757 回答