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

推荐订阅源

WordPress大学
WordPress大学
T
Threatpost
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
月光博客
月光博客
V
Visual Studio Blog
T
Tailwind CSS Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
Jina AI
Jina AI
J
Java Code Geeks
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
Recorded Future
Recorded Future
C
Check Point Blog
腾讯CDC
N
Netflix TechBlog - Medium
aimingoo的专栏
aimingoo的专栏
罗磊的独立博客
Hacker News: Ask HN
Hacker News: Ask HN
SecWiki News
SecWiki News
博客园 - Franky
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News | PayPal Newsroom
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security @ Cisco Blogs
W
WeLiveSecurity
The Last Watchdog
The Last Watchdog
Cloudbric
Cloudbric
F
Full Disclosure
The Cloudflare Blog
Y
Y Combinator Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
S
Schneier on Security
Schneier on Security
Schneier on Security
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
AI
AI
N
News and Events Feed by Topic
T
Tor Project blog
P
Palo Alto Networks Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
Google Developers Blog

博客园 - 可乐加冰

推荐一个单元测试模拟框架: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);