C#利用反射调用PB编译的COM组件
C#利用反射调用(后期绑定)PB编译的COM组件
C#调用COM组件可以在VS工程中直接添加引用,这种方式写起来很方便,但是当COM组件经常更新,这样处理起来倒不如后期绑定适用了。
1.根据COM组件的ProgID,得到COM组件公开的类型
Type comType = Type.GetTypeFromProgID(“jmjkk.n_sys_sbjc”);
2.创建COM组件提供的类型的对象
object comObj = System.Activator.CreateInstance(comType);
3.调用执行方法
类型和对象都用了,利用反射调用方法很简单,比如调用test方法,参数inParams:
object[] args = new object[1];
args[0] = 大专栏 C#利用反射调用PB编译的COM组件="n">inParams;
Method method = comType.GetMethod(“test”);
if (method != null){
method.invoke(comObj, args);
}
然而,并没有这么顺利,method一直为null。
查找文档,发现.Net COM组件和非.Net COM组件得到的comType是不一样的,如果COM组件为.Net COM组件,上述反射调用方法没问题;如果COM组件是其它语言编写的,运行时得不到该COM类型的元数据,得到的comType将是所有未知类型COM组件的统一分装类型System.__ComObject,System.__ComObject类并不包含你想调用的组件的方法,所以comType.GetMethod(“method_name”)拿不到要给定名称的成员方法。
正确姿势
非.Net COM组件得到comType和comObj后,使用comType.InvokeMember方法。comType.InvokeMember方法详细可参考MSDN中Type.InvokeMember 方法
object[] args = new object[1];
args[0] = inParams;
object returnObj = comType.InvokeMember(“test”
, BindingFlags.InvokeMethod
, null
, comObj
, args);
C#利用反射调用PB编译的COM组件的更多相关文章
- 利用反射--调用一个按钮的Click事件
最基本的调用方法 (1)button1.PerformClick();(2)button1_Click(null,null);(3)button_Click(null,new EventArgs()) ...
- 利用反射调用方法时,处理ref,out参数需要注意的问题(转)
转自:http://www.68idc.cn/help/buildlang/ask/20150318283817.html 项目中如下的泛型方法,因为要在运行时,动态指定类型参数,所以要利用反射来实现 ...
- java利用反射调用类的某个方法
java利用反射机制 可以动态调用某个类的某个方法,在 扩展系统功能或提供对外接口时经常用的到. 代码如下: 打印类Print.java package com.test.reflct; /** * ...
- Spring利用反射调用接口
首先在项目中使用java反射调用 //根据实例及参数名获得方法A Method method = event.getObj().getClass() .getMethod(event.getMetho ...
- C# 利用反射调用类下的方法
namespace TestReflection { public partial class Form1 : Form { public Form1() { InitializeComponent( ...
- C#调用PB写的com组件dll
背景 小编为了使用C#去模仿PB代码的加密算法,结果发现PB算法中,的long类型只有21亿,实际上传入的数值达到了78亿,造成了数据溢出,精度丢失的情况. 然而PB的算法已经使用C#不可以还原(C# ...
- 利用反射调用注解,模仿Spring
简介 在开发中,我们经常用的就是利用@RequestMapping来调用我们自己的逻辑,现在我们来创建属于自己的注解模仿一下它. 1.新建属于自己的注解@SeayaMapping @Target({E ...
- java 利用反射调用静态方法的示例
内容简介 主要介绍使用反射的机制来调用执行类中的静态方法. 静态方法 public class GisUtil { private final static Logger logger = Logge ...
- java工具类-接受请求参数,并利用反射调用方法
public String a(HttpServletRequest request,HttpServletResponse response) throws JSONException, IOExc ...
随机推荐
- Long型转ZonedDateTime型
/** * 将Long类型转化成0 * @author yk * @param time * @return */public static ZonedDateTime toZonedDateTime ...
- LeetCode——264. 丑数 II
编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 ...
- Android开发学习3
学习内容: 1.复选框CheckBox 2.ImageView & 使用第三方库加载网络图片 3.列表视图ListView 4.网格视图GridView 5.ScrollView & ...
- tensorflow(六)
一.TensorBoard可视化工具 TensorBoard实现形式为web应用程序,这为提供分布式.跨系统的图形界面服务带来了便利. 1.使用流程 SummaryOps->Session--( ...
- Nginx_安全1
Nginx 安全 nginx隐藏版本号 # 在Nginx的配置文件中进行修改,增加下面这个. server_tokens on; nginx对IP和目录限速 # Nginx可以通过HTTPLimitZ ...
- AC和路由器
无线AC控制器是一种网络设备,比如我曾接触过的丰润达的AC100和AC180等,用它们可以来集中控制和管理无线AP,比如下发配置.修改相关配置参数.射频智能管理.接入安全控制等. 路由器是一种连接多个 ...
- 计算a^b==a+b在(l,r)的对数Codeforces Round #597 (Div. 2)
题:https://codeforces.com/contest/1245/problem/F 分析:转化为:求区间内满足a&b==0的对数(解释见代码) ///求满足a&b==0在区 ...
- LeetCode No.127,128,129
No.127 LadderLength 单词接龙 题目 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵 ...
- 部署企业本地yum源及源码包安装
YUM命令 yum list //列出每个软件包(包括未安装和已安装) rpm -q repolist //列出所以仓库名称 info //查看软件信息 rpm -qi install //安装 rp ...
- Java基础语法要点
1.Java中byte.short.int.long的取值范围 byte:[-128,127] short:[-32768,32767] int:[-2147483648,2147483647] lo ...