高分请教:有关ActiveX的一些问题

iwin 2000-07-13 07:02:00
1. 自己写.idl文件时怎样确定一个uuid?
2. 使用QueryInterface(),CoCreateInstance()等函数时,往往要知道一个CLSID或FactoryID或REFID之类的ID号,如何得到这些ID号?本人初学ACTIVEX编程,想请教这些ID号有什么作用。


请各位高手尽量详细地讲解,最好有简单源码实例。
...全文
227 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
iwin 2000-07-18
  • 打赏
  • 举报
回复
感谢SOFTDOCTOR和JGTM2000的热心指教!!!
JGTM2000 2000-07-15
  • 打赏
  • 举报
回复
1,UUID即GUID,可以用微软的工具GUIDGEN程序获得,也可以自己写个小程序,用CoCreateGUID函数生成。在COM世界里,一切事物都以一个GUID唯一标示,所以你新定义的接口就要用一个新生成的GUID。
2,用CLSIDFromProgID函数可以把一个程序ID转换为相应的COM服务器的ClassID。这个ClassID就可以被CoCreateInstance用来创建指定对象。当然,对于Excel这样的程序,创建实例比较常用的是CoGetObject(利用Moniker)。
3,对于指定的COM对象,其相应的GUID(如ClassID,IID等)都是永远不能变的。当然,COM对于某些问题有一些动态的策略实现更大的灵活性,如组件集(Component Category)就利用了TreatAs方式实现了动态缺省组件的定义。
softdoctor 2000-07-14
  • 打赏
  • 举报
回复
首先uuid是一个 128 BIT的标识符,原则上可以任意确定,但如果任意确定就失去了他的本身的含义:全球统一标识。微软的获得CLSID的方法被认为是最标准的方法,即结合机器的网卡号,及当前时间以及其他一些与硬件相关的参数生成,用此种方法,基本能保证开发用户所生成的UUID不同,但当两台机器都没网卡的情况下,同时生成UUID,相同的几率就比较大了。

UUID 是标识COM对象的很好的解决办法,以为COM对象必须能被所有用户所认识,而且COM对象要支持网络,所以每个COM对象在全世界范围内必须有唯一的标识,这样才能不被混淆。

开发COM时,如果用VC的话有两个途径获得确定UUID。
CoCreateGuid()函数和GUIDGEN.EXE程序。

QueryInterface(),CoCreateInstance()时所要的CLSID之类,应由开发商给定。但一般现在的COM库都包含类型库信息(TYPELIB)
使用LoadTypeLib函数就可以获得ITypeLib 接口,利用其接口的ITypeLib::GetLibAttr函数可获得CLSID。
iwin 2000-07-14
  • 打赏
  • 举报
回复
再次谢谢softdoctor为我的讲解,但是具体怎样做,我还是不太明白。

1、如果我已经生成一个ATL OBJECT,它只有一个接口(INTERFACE),我现在想手工添加一个接口,该怎样做?如何确定一个UUID?

2、如果我要在VC++里生成一个EXCEL表格实例,应该怎样做?我希望CLSID是在程序中自动搜索出来的,我只需象在VB中的CREATEOBJECT()函数那样只给出一个类名(如:EXCEL.APPLICATION)。能否给出源码?

3、我能否写出一个具有动态的UUID的COM组件?

以上问题恳请SOFTDOCTOR和其他高手再次不吝赐教,谢谢!!!

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧