需求背景:公司目前在做一个金税打印的功能,存在一个问题,每次调用打印都会产生一个实例,而金税打印的插件有不能有多个实例,否则会报错。所以现在想出一个办法,就是通过C#编写一个ActiveX插件(相当于适配器的功能),通过C#编写的插件,来调用金税插件,采用单例模式,控制它只生成一个实例,目前存在如下问题:
1、怎么调用CLSID
2、调用到CLSID之后,怎么给他实例化
3、实例化之后,我怎么创建一个对应的类(如果是Object类型,那么这个实例就调用不到CLSID里面特有的那些属性了)
参考代码如下:
/// <summary> /// 创建金税插件的对象 /// </summary> /// <param name="clsid">金税插件的ClsId</param> /// <returns></returns> private static object GetActiveXObject(Guid clsid) { Type t = Type.GetTypeFromCLSID(clsid); if (t == null) { return null; } return Activator.CreateInstance(t); }
该代码创建出来的对象是Object类型的,所以没有金税插件应该有的属性和方法
请高手们提提建议该怎么解决?
如果说我的思路有问题,欢迎纠正!
直接vs中引用.每必要那么麻烦
可以这样吗,那个CLSID是安装了金税插件才有的,VS怎么直接引用
@zhengjinfeng: 装那个插件然后在引用进去.VS会根据插件自动产生DLL,你可以直接使用
@56180825: 那个插件不是标准的COM组件,没法直接引用的
@zhengjinfeng: 那用反射吧.别无他法.或者你索性用VB6.0
其实里面的方法是可以调用到的,只是在IE里面调试JS的时候看不到而已。
例如:里面有个Text属性,我直接obj.Text是可以调用到的,只是看不到,就像是预定义的一个内置属性,这可能就是ActiveX创建的js对象,跟直接在js代码里面创建的对象一个不同点吧