我有一个使用COM库的应用程序,只是想知道如何知道该应用程序是否将该COM库用作LocalServer或In-Proc?
我查看了以这种方式构建的代码:
DATCOMLib::ITEmulationPtr pTE(__uuidof(DATCOMLib::TEmulation));
答案 0 :(得分: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
答案 1 :(得分:1)
可以通过多种方式找到它
从查看代码 - 检查调用“ CreateInstance ”或“ CoCreateInstance ”时传递的类上下文是什么 - (CLSCTX_INPROC_XXXX然后它是inproc服务器表示它是DLL,它将加载到调用应用程序进程地址空间.CLSCTX_LOCAL_SERVER,CLSCTX_REMOTE_SERVER - 然后它是作为一个单独的进程运行的COM服务器。有一些#defines结合了一个或多个标志。只是google it)
ITEmulationPtr.CreateInstance(uuid(TEmulation), 0, CLSCTX_XXX)
如果您可以访问安装了COM组件的计算机,那么您可以按照上面的回答中所述的步骤进行操作
答案 2 :(得分:0)