进程外组件的一个有关问题,高分相赠

进程外组件的一个问题,高分相赠
我需要在一个大型程序提供Com服务,其他程序通过com机制可以访问该程序提供的数据对象。现在遇到的问题是,由于需要访问该程序的数据对象,因此需要使用进程外组件,但是由于程序结构的原因,将程序的主exe修改成组件服务器不现实。因此我设想在该程序中添加一个dll库。主程序启动时将该dll库配置成为com服务器,其他客户端程序通过该dll创建com组件。
(补充一点,由于该程序结构庞大,仅能部分实现组件化。因此com服务器必须设在主程序exe进程内,才能访问组件数据以及其他常规数据。)

不知道这种设想是否可行,以及如何用dll实现进城外组件?或者有其他更好的架构来解决这个问题。有过类似经历的朋友请指点一二,不甚感激。

------解决方案--------------------
我们也在做,关注一下
------解决方案--------------------
呵呵,还想了3方法,你参考一下吧:

1) 如果不采用在该程序内使用com的话,可在主程序中创建一个线程,用此线程来完成你的任务,此方法应该简单易行。

2) 如果非要在该程序内使用com的话,可采取类似隐藏窗口的方法,将此com组件隐藏起来,只要在主程序中向系统中注册此组件,并实例化它,然后就能使用它的各个接口函数了,有点类似装载一个dll库。如果需要本地化,则将其下载到本地注册即可。作用同一个线程差不多,想用时就用,不想用时不管它就OK了。

3) 自己写一个数据控件吧,实现功能就行,让用户自己点击或选取,叫他们用去吧!
------解决方案--------------------
设计一个新的接口,并实现类厂,然后,调用就可以访问原来exe相关的函授。
------解决方案--------------------
这样应该是可以的,我觉得真正的组件还是这个EXE,而不是DLL,只不过实现的代码在这个DLL中。如果注册的是DLL而非EXE的话,DLL如果是进程外,那么DLL会被COM单独加载在一个DllHost.exe中,而不是你的程序,如果是进程内,那么这个DLL会被直接Load在Client程序的进程中,根本无法运行。所以还是要注册这个EXE,这个是没有问题的。实现上,DLL要调用CoRegisterClassObject把类厂对象注册起来,这样Client才可以调用CoGetClassObject来获得对应的类厂对象。后面的就好办了。