打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
CreateInstance(

MFC+ADO数据库编程中,

在创建一个连接对象(Connection)和记录集对象(RecordSet)时,要用到CreateInstance,

创建连接对象时,我们经常能看到CreateInstance(_T("ADODB.Connection"))和CreateInstance(__uuidof(Connection))这两种写法~~

在实例中,这两种都是对的,

下面来看看他们的区别:

第一种是通过名字创建对象,可能会出现冲突.
第二是通过uuid创建对象,这个uuid是唯一的.
两种都是符合COM规范的.像JS都是使用第一种方式创建COM对象的  


COM本质论上的一段原文

除了用CLSID来命名实现之外,COM也支持文本方式的别称,被称为programmaticID
或者ProgID。ProgID采用库名.类名.版本的形式,而且,与CLSID不同的是,我们只是为
了方便而要求ProgID是唯一的。通过COM API函数CLSIDFromProgID和
ProgIDFromCLSID,客户可以在ProgID和CLSID两者之间进行转换,这两个函数的原形如
下:
HRESULT CLSIDFromProgID ( [in,string]LPCOLESTR lpszProgID, [out] LPCLSID pclsid);


HRESULT ProgIDFromCLSID ( [in]REFCLSID clsid,  [out,string]LPOLESTaR* lplpszProgID);


为了把一个ProgID转换为CLSID,我们只需简单的调用CLSIDFromProgID:
HRESULT GetCGorillaCLSID(CLSID& rclsid){
const OLECHAR wszProgID[] = OLESTR("Apes.Gorilla.l");
return CLSIDFromProgID(wszProgID,&rclsid);
}  


第二种是以唯一的uuid(也叫CLSID)来获取,就像使用你的身份证来确定你这个人一样,

而第一种是以这个COM类的名来获取,就可能重名,或无法找到这个名,导致无法再找到对应的UUID(CLSID),就好像用张三来找你一样,

有几百个叫张三的,系统就不知道哪个是你了,或者你明明有身份证,但姓名没有登记正确,也就找不到你了.

因此第二种最好的方法,不会出错.他用的就是相当于数据库表中的主键一样.唯一值!


推荐使用第二种~~


PS:

UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
微软的COM中GUID和UUID、CLSID、IID
COM编程技术基础之二
vc中调用Com组件的方法详解
DirectShow中写push模式的source filter流程
COM笔记-类厂
COM中GUID和UUID、CLSID、IID
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服