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组件部分也可以找到相应组件。没有添加组件测试,怕把项目又给弄坏了-_-)

 

posted @ 2021-01-28 10:11  yx_亦心  阅读(1298)  评论(0编辑  收藏  举报