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

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Webroot Blog
Webroot Blog
U
Unit 42
A
About on SuperTechFans
宝玉的分享
宝玉的分享
月光博客
月光博客
C
CERT Recently Published Vulnerability Notes
P
Privacy International News Feed
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
P
Privacy & Cybersecurity Law Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Securelist
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Spread Privacy
Spread Privacy
L
Lohrmann on Cybersecurity
Apple Machine Learning Research
Apple Machine Learning Research
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
B
Blog
I
Intezer
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
V
V2EX
L
LangChain Blog
AI
AI
G
GRAHAM CLULEY
T
Tor Project blog
人人都是产品经理
人人都是产品经理
D
Docker
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
I
InfoQ
Y
Y Combinator Blog
C
Comments on: Blog
GbyAI
GbyAI
www.infosecurity-magazine.com
www.infosecurity-magazine.com
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
aimingoo的专栏
aimingoo的专栏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
腾讯CDC
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
H
Help Net Security
Vercel News
Vercel News
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿

博客园 - 子原

快捷键 ucm命令 c语言编程规范和范例 XHTML DHTML SHTML到底是什么 xml入门精解之文件格式定义(dtd) XHTML和HTMl区别 硬编码和软编码 ASP.NET vs ASP—编译与解释的区别 (低级语言 || 高级语言) && (编译 || 解释) RegisterStartupScript(key, script) and RegisterClientScriptBlock(key, script) Visual Studio .Net团队开发 使用Javascript和DOM Interfaces来处理HTML html代码元素列表说明及HTML标记参考手册 HTML中的转义字符 ASP.NET1.0升级ASP.NET2.0的问题总结 学习ASP.NET步骤 跨服务器数据库查询 BCNF范式 DLL地狱
net CreateObject 方式无法直接拿到com组件的具体内容
子原 · 2007-06-29 · via 博客园 - 子原

Q:在下列中的第二种情形:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim mExcelApplication As New Excel.Application
        Dim mWorkbook As Object = mExcelApplication.Workbooks.Add

        Dim mEventInfo As Reflection.EventInfo = mWorkbook.GetType.GetEvent("BeforeClose")
        Console.WriteLine(mEventInfo Is Nothing) 'False

        mWorkbook.Close()
        mExcelApplication.Quit()
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim mExcelApplication As Object = CreateObject("Excel.Application")
        Dim mWorkbook As Object = mExcelApplication.Workbooks.Add

        Dim mEventInfo As Reflection.EventInfo = mWorkbook.GetType.GetEvent("BeforeClose")
        Console.WriteLine(mEventInfo Is Nothing)        'True

        mWorkbook.Close()
        mExcelApplication.Quit()
    End Sub
 第二种情况无法拿到EventInfo

A

1、com的调用:
    .net调用com不是直接调用而是通过RCW来调用的,RCW相当于com本身一模一样的分身,.net调用com的方法,事件,属性其实都是通过这个rcw.
具体可看
ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconmarshalingselectedinterfaces.htm
2、com的事件:
   com的事件类似于.net的委托,不过不是传入一个函数指针这么简单,它叫连接点技术,引发事件的com组件叫源对象,它要求任何使用它的事件功能的程序实现它的一个输出接口,客户通过把这个接口传入com组件,com组件引发事件时调用客户的接口方法来实现的
ms-help://MS.MSDNQTR.2003FEB.2052/vccore/html/_atl_Connection_Points.htm
3、自动化
   这里要说自动化,因为我记得除了c调用com外,其它语言必须使用自动化技术调用com,也就是说com要想被诸如vb、java、脚本调用必须支持自动化,这是因为别的语言无法直接理解c++的对象在内存中的表示。
   com实现自动化,是通过实现IDispatch接口,这个接口提供了一组标准的方法,可以让客户可以了解com组件的方法,事件,属性。
   ms-help://MS.MSDNQTR.2003FEB.2052/automat/htm/autoportal_7l45.htm

通过引用获得com的RCW,相当于直接获得了com对象的全部(方法,属性,事件),所以eventinfo有值
而CreateObject只有在运行中通过自动化方式获得com的接口,前面我说过要支持com事件需要客户实现com组件的一个接口,也就是说如果运行时要自动添加一个类型,技术上可以达到但不合理,例如一个组件有几百个事件,而且程序只需支持几个事件,确要实现几百接口?而且没有必要,因为连接点也可以是自动化的可以在运行时获得具体的内容。