Gro*_*kys 9 .net c# com automation
我目前有一个用C#编写的.NET类库,它通过COM将其功能暴露给C++程序(pre -.NET).
我们现在想要将库移出进程以释放主应用程序中的地址空间(它是一个图像处理应用程序,大图像占用了地址空间).我记得在我的VB6时代,人们可以创建一个"OLE自动化服务器".操作系统会在创建/销毁对象时自动启动和停止服务器.exe.这看起来非常适合我们:据我所知,除了用CLSCTX_LOCAL_SERVER而不是CLSCTX_INPROC_SERVER调用CoCreateInstance之外,客户端不会发生任何变化.
我如何在C#中创建这样的进程外服务器?要么网上没有关于它的信息,要么我的术语已经过时/过时了!
你实际上可以在.NET中做到这一点(我以前做过它作为一个概念验证),但是让一切正常工作(流程生命周期,注册等)是一项工作.
创建一个新的Windows应用程序.在Main方法中,调用RegistrationServices.RegisterTypeForComClients-这是CoRegisterClassObject的托管包装器,它为您处理类工厂.将它传递给托管的ComVisible类的类型(您实际想要创建的类 - .NET自动提供类工厂)以及RegistrationClassContext.LocalServer和RegistrationConnectionType.SingleUse.现在你有一个非常基本的exe,可以注册为LocalServer32进行COM激活.您仍然需要计算进程的生命周期(使用构造函数/终结器在托管对象上实现refcounts - 当您达到零时,调用UnregisterTypeForComClients并退出) - 在所有对象都死亡之前,不能让Main退出.
注册也不错:创建一个ComRegisterFunction属性方法,在HKLM\CLSID(yourclsidhere)下添加一个LocalServer32键,其默认值是exe的路径.运行regasm yourexe.exe/codebase/tlb,你很高兴.