COM学习--1.COM对象标识
来源:互联网 发布:水文气象数据的重要性 编辑:程序博客网 时间:2024/05/01 17:49
引子
步入软件行业有些年头,对于c++的理解也算有些。本来准备从事linux驱动相关,可后来各种机缘一直辗转在windows桌面开发。用过qt、玩过mfc,虽然能够比较熟练地windows下的部分api但谈到COM一直是种痛,而且近日用到ShockwaveFlash显示而且要求显示透明背景,辗转使用多个网上的版本均不是很让我满意,用到了今下决定搞定com,遂开此贴。
COM对象标识
COM对象标识的方案选择
《COM原理与应用》一书中对CLSID的解释最为透彻,现引用上面的讲解。
1.com的标识主要用于能够让 客户寻找到COM组件,但是COM组件的位置对于客户来说是透明的,于是,客户无法通过一个地址之类的标识来索引到所需要使用的com组件;
2.对于以上问题第一种解决方案:对于COM组件定义一个唯一标识符,例:字符串;缺陷:名字冲突的可能性很大,唯一性难以保证;
3.改进,按照类似tcp/ip对COM组件表示进行分配,导致需要一个组织来同意分配,这样对于开发迭代比较不合理;
4.最终方案:通过GUID进行标识(guid为128位全局唯一标识符,这是一个随机数,不需要专门机构进行分配和管理,因为GUID是一个随机数,产生相重的概率非常小,理论上一台机器美妙产生10 000 000 == 1000w个GUID则可以保证(概率意义上)3240年不重复)。
GUID结构及产生
GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,查找在vs中可以查找到其定义
typedef struct _GUID { unsigned long Data1; unsigned short Data2; unsigned short Data3; unsigned char Data4[ 8 ];} GUID;
那么如何生成GUID呢?
1.通过vs工具
2.通过CoCreateGuid来生产GUID
#include "stdafx.h"#include <afxwin.h>#include <combaseapi.h>#include <iostream>int main(){ static char buf[64] = { 0 }; GUID guid; if (S_OK == ::CoCreateGuid(&guid)) { _snprintf_s(buf, sizeof(buf) , "{%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}" , guid.Data1 , guid.Data2 , guid.Data3 , guid.Data4[0], guid.Data4[1] , guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5] , guid.Data4[6], guid.Data4[7] ); } std::cout << buf << std::endl; return 0;}
0 0
- COM学习--1.COM对象标识
- COM对象的标识——CLSID
- COM接口定义和标识
- Com对象
- com 对象
- COM学习-COM介绍
- Delphi面向对象学习随笔七:COM
- Delphi面向对象学习随笔七:COM
- Delphi面向对象学习随笔七:COM
- 学习com
- COM学习
- COM学习....
- COM学习
- COM学习
- COM 学习
- Com学习
- com学习
- COM学习
- jsp中文乱码六种情况---解决方案
- 红星美凯龙的笔试和面试
- hbase shell基础和常用命令详解(转)
- 进制转换
- 鼠标经过选项,浅色边框变成红色边框,原来的浅色竖线被覆盖;尽量但是不改变原来选项的盒子的大小的方法;如图效果
- COM学习--1.COM对象标识
- HBase体系结构(转)
- HBase Java API类介绍
- Android—ScrollView和HorizontalScrollView使用
- 搭建Hadoop HA集群
- 华为2016上机考试第一题
- 通过Java Api与HBase交互(转)
- 生命无痕
- 使用mentohust解决ubuntu下校园网无法连接