Board logo

标题: [技术讨论] 谁帮我看下COM对象的概念的描述是否妥当 [打印本页]

作者: czjt1234    时间: 2013-6-25 16:07     标题: 谁帮我看下COM对象的概念的描述是否妥当

本帖最后由 czjt1234 于 2013-6-25 17:00 编辑

通用唯一识别码,简称UUID

UUID是按开放软件基金会(OSF)制定的算法,由机器产生的128位的数字

格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12),其中x是十六进制的数字
例如:6F9619FF-8B86-D011-B42D-00C04FC964FF

UUID的格式和长度是固定的

需要UUID的时候,由机器按算法自动产生,不需要一个权威机构来管理

按照该算法标准,理论上不会产生出2个相同的UUID。这也是该算法的目的

目前最广泛应用的UUID,是微软的GUID
其他重要的应用,有 Linux ext2/ext3 档案系统、LUKS 加密分割区、GNOME、KDE、Mac OS X 等等

UUID的唯一性,在保密性方面需要引起关注
比如,offices2000曾给每一个文档附加UUID,用户看不到,但微软可以读取
理论上,微软就可以根据UUID,在全球范围内锁定该文档是由哪台电脑何时创建的

又如,在iTunes软件中,可以看到每一个iPod、iPad、iPhone的UUID

微软使用UUID,称之为:全局唯一标识符,简称GUID

COM对象使用GUID,称之为;类标识符,简称CLSID

显然这三者的格式是一样的,都具有全球唯一性

--------------------------------------------------------------------------------

COM规范是微软制定的一个编程规范、编程标准

COM组件是按COM规范编写的dll文件或exe文件,可以是微软编写的或第三方编写的

用regsvr32命令注册COM组件后,可以使用COM对象

每个COM对象都有全球唯一的类标识符(CLSID),都有组件接口(属性或方法)

为便于使用,许多COM对象提供了易记的名字ProgID

注意:区分COM对象的唯一标志是CLSID,不能用ProgID区分COM对象
指向同一CLSID的不同ProgID,代表同一个COM对象

如同一个COM对象的不同版本
ProgID:WScript.Shell 和 WScript.Shell.1
CLSID都是:{72C24DD5-D70A-438B-8A42-98424B88AFB8}

比如导入注册表
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\QQ.20147578]
@="Windows Script Host Shell Object"

[HKEY_CLASSES_ROOT\QQ.20147578\CLSID]
@="{72C24DD5-D70A-438B-8A42-98424B88AFB8}"

那么我们就可以用ProgID:QQ.20147578来创建WshShell对象
Dim objWshShell
Set objWshShell = CreateObject("QQ.20147578")
Msgbox objWshShell.CurrentDirectory

编程语言可以指定CLSID或ProgID来使用COM对象。vbs只能指定ProgID

ProgID 在注册表的 HKEY_CLASSES_ROOT
CLSID  在注册表的 HKEY_CLASSES_ROOT\CLSID
当你注册了新的COM组件后,这儿就会增加新的ProgID和CLSID

安装的软件不一样,则不同机器的可用的COM对象也就有多有少
包括微软,每天都有无数的程序员在编写新的COM组件
因此想要找COM对象大全是不可能的

注意,这2个注册表位置并非只保存COM对象的信息
所以注册表里CLSID对应的ProgID并不都能用来创建对象
作者: Demon    时间: 2013-6-25 22:00

你不是最喜欢找对象大全么
作者: czjt1234    时间: 2013-6-25 22:48



我今天看了一天,与creatrobject()相关的com对象的概念

你的creatrobject()的运行原理我还没看懂

主要那些函数不清楚




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2