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 ...
随机推荐
- eureka学习之二:自我保护机制
提供者和消费者:消费者通过注册服务名称,找rpc远程地址,调用提供者的接口 Eureka的自我保护机制:
- semantic框架 - selection dropdown自定义样式
semantic和Bootstrap是我最常用的前端框架. 这次需求,是要修改selection dropdown. 直接贴代码,不解释. .ui.form input:not([type]):foc ...
- docker安装(centos-7)
centos7安装docker:Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker .通过 uname -r 命令 ...
- [Algo] 625. Longest subarray contains only 1s
Given an array of integers that contains only 0s and 1s and a positive integer k, you can flip at mo ...
- maven 设置pom 指定jdk版本
<profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</acti ...
- kotlin 单例模式
class Single{ companion object { val instance:Single by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZE ...
- js几个常用的弹层
js弹层技术很常见,自己每次用上网找,一找一大堆. 对比了几种,考虑通用性和易用性,这里记录两个. jQueryUI的http://jqueryui.com/dialog/#modal-form ar ...
- [LC] 289. Game of Life
According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...
- Java发送邮箱
smtp与pop3 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议 SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器 POP3是Post Office ...
- sql查询语句解析过程--根据网络资料整理
查询语句: (8)SELECT(9)DISTINCT(11)<TopNum> <selectlist> (1)FROM<left_table> (3)<joi ...