目前用vc++开发了一个类似于微软office excel com组件类型的应用,这个应用里的所有函数功能本身都做成了接口,想法是既可以自身在托盘程序里启动时加载这些功能,也能够提供给其他程序调用!!其本身托盘程序工作都正常的,就是在C#开发的网站里调用时,问题出来了,我们常规的使用都是要先实例化提供接口程序的类,然后调用面的方法,是可以调用,但问题也随之出来,由于new了一个新实例,和本机托盘程序不是一个实例,我想问下,用何办法可以调用目前已运行com组件实例化后的组件内部的接口等?代码该怎么写?或者我们开发的com组件需要做哪些调整?
例如我们平时的excel com组件的调用:
Excel.Application excel = new Excel.Application ();
excel.Application.Workbooks.Add(true);
excel.Visible = true ;
我的一个调用:
PHCore2Lib.ApplicationMgrClass PHCoreSL = new PHCore2Lib.ApplicationMgrClass();
PHCoreSL.Stream.Open();//这里如果使用PHCoreSL 实例里的Open()方法,就会又执行了一个PHCore2托盘程序,且和原先已经运行的程序不是同一个实例。
TextBox2.Text = PHCoreSL.Stream.GetAllInfos().ToString();
当然功能上时走通了,com 里GetAllInfos()方法的功能都能使用,但和本机托盘程序运行的不是同一个实例。如何调用当前进程中正运行的com组件自身已实例化、初始化的接口?
这个问题简单,你可以把已经存在的对象序列化一个文件或者数据库中,然后你的其他程序运行的时候检查一下,如果存在的话,就在从序列化的文件或者数据库中创建对象就可以了。
这样的应用不好做吧 ,最好想别的办法解决,你托盘里边的是一个进程 ,你要从一个进程里边访问另外一个进程实例化的对象 貌似是不允许的 ,除非你把托盘进程里边的东西做成一个接口,比如读取某些参数 他就可以做某些动作 然后你写另外一个进程去改参数就ok了 一般我们都这么做 直接调用实例化的对象 好象是不行的 .
你这个设计到进程通信嘛
可以用API做啊
你的外部程序发Windows消息到托盘程序