c#-添加com组件
因为项目中用到的第三方读卡控件是com组件(a.ocx)。
故使用了一下方式添加:
1.管理员模式运行vs的开发人员命令提示符窗口,输入aximp 路径\a.ocx生成相应的dll文件,然后再在项目中右键-添加引用-将生成的dll文件引用使用。
出现问题:由于项目使用的.net版本为2.0,而a.ocx生成的dll依赖.net 4.0框架,故生成项目一直失败。只能使用其他方式进行调用。
2.在代码中添加窗体,在窗体页面工具箱选项卡中右键添加选择项-com组件-浏览-找到需要引用的com组件a.ocx。选中确定后,选项卡下出现了相应的组件,直接拖到窗体中即可引用成功。避开了框架问题。
出现问题:由于另一个项目也需要引用此组件,工具箱中拖拽组件后报错。原先的项目也报错了。不知道怎么搞得,乱七八糟的......此步骤重来一遍时发现浏览中选中a.ocx确定后,com组件里没有相应组件.....故,只能在找其他方法。
3.动态引用-
private void button4_Click(object sender, EventArgs e) { // //根据classId获取ActiveX类 Type type = Type.GetTypeFromCLSID(new Guid("91341374-F35C-41C2-9A22-1AB9177B3EC6")); //创建类的实例,第二个参数是object数组,就是你的构造方法里面的参数, //null即为无参构造方法,也可以这么写: // object obj = Activator.CreateInstance(type); object obj = Activator.CreateInstance(type, null); // 获取实例的指定方法,根据方法名,还有其他重载,也可以根据参数找 MethodInfo mi = type.GetMethod("ReadInfo"); // 调用该方法的参数,按顺序 object[] para = new object[] { }; // 调用方法,返回值是object,我的方法返回void,所以不写 string a = (string)mi.Invoke(obj, para); ////把ActiveX控件添加到窗体 //Control con = (Control)obj; //con.Dock = DockStyle.Fill; //Controls.Add(con); }
出现问题:执行com内的方法时出现时出现:灾难性故障.....搜不到合适的解决方案。再寻找其他方法。
4.管理员运行cmd 输入regsvr32 路径\a.ocx 进行注册控件。然后到工具箱-选择项-com组件可以找到此组件。拖拽到窗体后解决。(在项目引用上右键添加引用,引用管理器中com组件部分也可以找到相应组件。没有添加组件测试,怕把项目又给弄坏了-_-)