惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Schneier on Security
The Last Watchdog
The Last Watchdog
Cyberwarzone
Cyberwarzone
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
L
Lohrmann on Cybersecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
The Cloudflare Blog
V
V2EX
博客园_首页
博客园 - 聂微东
Vercel News
Vercel News
人人都是产品经理
人人都是产品经理
G
GRAHAM CLULEY
T
Tenable Blog
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
L
LINUX DO - 最新话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
SecWiki News
SecWiki News
博客园 - 三生石上(FineUI控件)
S
Secure Thoughts
N
News | PayPal Newsroom
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
T
Troy Hunt's Blog
博客园 - 【当耐特】
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
A
About on SuperTechFans
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
D
DataBreaches.Net
P
Privacy & Cybersecurity Law Blog
Schneier on Security
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
D
Docker
P
Proofpoint News Feed

博客园 - 可乐加冰

推荐一个单元测试模拟框架:Nsubstitute QuickFIX/N与QuickFIX的.NET封装不同之处 QuickFIX/N入门:五、如何自定义FIX QuickFIX/N入门:四、使用消息循环分组 QuickFIX/N入门:三、 如何配置QuickFIX/N QuickFIX/N入门:二、发送消息及接收消息 QuickFIX/N入门:一、如何创建一个QuickFIX/N的应用程序 转、分享:PMP学习资料、考试资料推荐:第四版-2008版-吴永达 关于“类型初始值设定项引发异常” 浪费时间的主观原因 关于C#调用VC++.net程序集出现0x800736B1的异常 关于微软发布的Microsoft 图表控件 Windows Mobile开发资源相关下载收录 值得珍藏的五十句话 Fund Managers Switching to Algorithmic Trading[转] winform窗体中嵌入显示Excel文件 让CheckBoxList,CheckBox 控件不能操作 - 可乐加冰 - 博客园 关于世界杯 C#在word文档中替换字符串
C#后期绑定方式来调用COM对象
可乐加冰 · 2008-05-10 · via 博客园 - 可乐加冰

实际应用当中,可能有的时候需要用到后期绑定方式来调用COM对象。

1、静态方法System.Type.GetTypeFromProgID 方法 (String),该方法可获取与指定程序标识符 (ProgID) 关联的类型,如果在加载 Type 时遇到错误,则返回空值。
通过它可获取对代表COM对象类型的Type对象的引用。此方法是专为 COM 组件支持提供的。
2、静态方法System.Activator.CreateInstance(),使用与指定参数匹配程度最高的构造函数创建指定类型的实例。
这里使用Activator.CreateInstance()创建COM对象的一个实例。
3、System.Type类的非静态方法InvokeMember()可以创建一个在编译期间未知的类的实例,只需要在调用的时候使用BindingFlags枚举量中的SetProperty值即可对com对象的公共属性进行操作。
InvokeMember方法的5个参数如下:  
  1)要调用的成员的名称。String,它包含要调用的构造函数、方法、属性或字段成员的名称;空字符串 (""),表示调用默认成员;对于 IDispatch 成员,则为一个表示 DispID 的字符串,例如“[DispID=3]”。
  2)BindingFlag枚举的值,表明调用的是属性还是方法等。这个位屏蔽,由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一,如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找类型,则将应用 BindingFlags.Public |BindingFlags.Instance。
  3)一个 Binder 对象,该对象定义一组属性并启用绑定,而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。通常使用默认Binder 对象,即传递一个null值;
  4)对Com对象本身的引用;
  5)包含传递给要调用的成员的参数的数组。即希望给Com方法发送的输入参数数组。

以下是测试代码,调用Word的com组件,并设置它的可视属性。

  object comObject;
            System.Type comObjectName;
            
//参数
            object[] args = new object[1];
            
//要获取的类型的 ProgID。 
            string progID = "Word.Application";

            
//与指定 ProgID 关联的类型,即获取相应的Com对象
            comObjectName = System.Type.GetTypeFromProgID(progID);
            
//创建Com的实例
            if (comObjectName != null)
            
{
                comObject 
= Activator.CreateInstance(comObjectName);
                
//设置需要设置的参数值
                args[0= true;
                
//设置可视属性,显示Word窗体
                comObjectName.InvokeMember("Visible", BindingFlags.SetProperty, null, comObject, args);
            }

以下是调用方法示例(关闭刚才创建的Word窗体)

            args = new object[3];
            comObjectName.InvokeMember(
"Quit", BindingFlags.InvokeMethod, null, comObject, args);