首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reg-free COM out of process EXE

Reg-free COM out of process EXE
EN

Stack Overflow用户
提问于 2020-06-22 21:27:41
回答 1查看 145关注 0票数 1

我有几个组件(多个.dlls,一个.exe),我需要使用注册免费。在我的sxs清单中,我列出了dll文件:

代码语言:javascript
复制
<file name="xxx.dll"
  <comClass
    description="xxx component"
    clsid="{xxx-xxx}"
    threadingModel="Apartment" />
</file>

我已经创建并激活了一个激活上下文,可以在这些dll组件上调用CoCreateInstance();而不会出现问题。

但是,我也有一个COM服务器单例(作为.exe)需要运行,并且我相信您只能将dll文件放入sxs清单中。我有它的CLSID。

我受到的限制是,使用regsvr不能实现这一点,所以有没有其他方法可以实现这一点呢?理想情况下,所有事情都在我创建这些其他组件的地方以编程方式完成。

EN

回答 1

Stack Overflow用户

发布于 2020-06-26 00:33:38

这也是一座桥,far...to试着通过清单来实现它。但是,您可以手动执行此操作。但是,你必须做的是操作系统所做的事情。您必须:

  1. 使用所有正确的命令行选项调用CreateProcess(),并在process
  2. Make your COM calls

上调用WaitForInputIdle()

如果您使用的接口是自定义的,那么您可能还必须拥有这些接口的条目。如果可能的话,我可能会建议让它们与IDispatch兼容。

要了解哪些命令行选项是必需的,您必须在构建计算机上注册服务器,然后查找CLSID的LocalServer32注册表项,并查看参数是什么。如果它们是MFC或ATL,它们可能会略有不同,但通常ATL参数总是相同的,除非您执行自定义操作。

如果由于某种原因CreateObject()失败了,那么您可能不得不在您创建的进程上调用TerminateProcess(),否则您将会有一堆孤立的进程。如果成功创建了对象,则正常的COM引用计数应足以自动关闭服务器进程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62515585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档