社区
ATL
帖子详情
ATL com组件注册
lcy853142
2009-07-14 03:30:25
请教
我现在有两个com组件,我想将两个com组件注册到注册表中的同一个组下,同时提供一个GUID,通过这个GUID值
能够找到这个组,然后能够枚举出这个组下的所有com组件
请问怎么在rgs文件中修改
...全文
190
12
打赏
收藏
ATL com组件注册
请教 我现在有两个com组件,我想将两个com组件注册到注册表中的同一个组下,同时提供一个GUID,通过这个GUID值 能够找到这个组,然后能够枚举出这个组下的所有com组件 请问怎么在rgs文件中修改
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ID大头哈哈
2009-07-18
打赏
举报
回复
你是想添加到自定义的组件类别组中吧
在自注册函数中
1 完成自注册
2 调用CreateComponentCategory创建自定义组件类别
2 调用RegisterCLSIDInCategory注册组件类别
//自定义组件类别
HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription)
{
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (FAILED(hr))
return hr;
// Make sure the HKCR\Component Categories\{..catid...}
// key is registered.
CATEGORYINFO catinfo;
catinfo.catid = catid;
catinfo.lcid = 0x0409 ; // english
// Make sure the provided description is not too long.
// Only copy the first 127 characters if it is.
int len = wcslen(catDescription);
if (len>127)
len = 127;
wcsncpy(catinfo.szDescription, catDescription, len);
// Make sure the description is null terminated.
catinfo.szDescription[len] = '\0';
hr = pcr->RegisterCategories(1, &catinfo);
//if (!FAILED(hr))
//MessageBox(NULL,catDescription,_TEXT("CreateComponentCategory"),MB_OK);
pcr->Release();
return hr;
}
// 注册组件种类
HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
{
// Register your component categories information.
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (SUCCEEDED(hr))
{
// Register this category as being "implemented" by the class.
CATID rgcatid[1] ;
rgcatid[0] = catid;
hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);
/* if (!FAILED(hr))
MessageBox(NULL,_TEXT("successful"),_TEXT("RegisterCLSIDInCategory"),MB_OK);*/
}
if (pcr != NULL)
pcr->Release();
return hr;
}
yxder
2009-07-17
打赏
举报
回复
[Quote=引用 4 楼 lcy853142 的回复:]
这样做不行
我刚试了
因为如果注册第一个之后
再注册第二个,不会注册到同一个键下
而是用第二个的信息替换掉第一个去了
[/Quote]
要么你就把其中一个ID更改下,分别调用哪个,要么你就是用COM组件的包容或者聚合,不知道把2个控件打包了能行不?
yxder
2009-07-16
打赏
举报
回复
原理比较好理解,但是目前我还实现不了,若你能实现了,顺便教教我
yxder
2009-07-16
打赏
举报
回复
可以尝试下 包容 或者 聚合,把2个控件合并成一个注册
lcy853142
2009-07-16
打赏
举报
回复
我已经实现了
oysoft
2009-07-15
打赏
举报
回复
1.看系统是否存在组件类别管理器(comcat.dll)
2.类型射逻辑没有尝试在尝试一个类注册为(不存在)类别的成员之前把类别添加到系统中,需要自己在rgs中手动添加
lcy853142
2009-07-14
打赏
举报
回复
楼上的大哥
我使用组件类别管理
可是搞不定
我是这样做的
比方说我有两个组件A、B
我在A组件对象的IDl文件中定义了一个组件类别CATID
const static GUID CHSJ_CARD = { 0x4b1f95d, 0x5f8e, 0x4b53, { 0xa3, 0xbb, 0xc6, 0xf6, 0xc7, 0x48, 0xbb, 0x38 } };
然后在rgs文件中这样注册类别管理对象的
NoRemove 'Component Categories'
{
{04B1F95D-5F8E-4b53-A3BB-C6F6C748BB38}
{
val 409 = s 'CHSJ_CARD'
}
}
并且在组件对象里
使用宏
BEGIN_CATEGORY_MAP(CCHCHKCard)
IMPLEMENTED_CATEGORY(CHSJ_CARD)
END_CATEGORY_MAP()
B组件里也是这样弄的
组件类别是给注册到注册表Component Categories 下了
可是他下面什么也没有
请问这是怎么回事
oysoft
2009-07-14
打赏
举报
回复
COM支持 组件类别管理
比如说,能被IE调用的COM对象要求实现一系列接口,如果你的COM对象实现了这一系列接口,你就可以声明这个接口属于CATID_SafeForBrowsing(大概是这么写)或CATID_SafeForScripting,这样IE调它是就不会报出“此控件不安全”之类的警告。声明组件类别在ATL中用BEGIN_CATEGORY_MAP宏。
lcy853142
2009-07-14
打赏
举报
回复
这样做不行
我刚试了
因为如果注册第一个之后
再注册第二个,不会注册到同一个键下
而是用第二个的信息替换掉第一个去了
fengrx
2009-07-14
打赏
举报
回复
楼主将 中的'TypeLib' = s '指向的ID修改成同一个试下,
注意:idl文件中library指向的ID和这个ID要一致。两个IDL文件,两个RGS文件,共四个地方需要修改成这个ID。
lcy853142
2009-07-14
打赏
举报
回复
可不可以指定注册到同一个键下?
高手给解答一下
fengrx
2009-07-14
打赏
举报
回复
不可能吧,
不同的COM组件就已经使用不同的ID了。
楼主如果想实现这样的效果,为什么不直接把两个组件的代码放在一个里边呢。
ATL
创建进程外
COM
组件
服务(C++)
ATL
创建进程外
COM
组件
服务,包含
COM
组建客户端测试程序,使用时,需要先通过批处理文件将
COM
组建服务
注册
到Windows系统中(win10测试通过),具体可参考我的文章《
ATL
创建进程外
COM
组件
服务(C++图解说明)》
COM
组件
设计与应用
COM
组件
设计与应用(七)——编译、
注册
、调用
COM
组件
设计与应用(八)——实现多接口
COM
组件
设计与应用(九)——IDispatch 接口 for VC6.0
COM
组件
设计与应用(十)——IDispatch 接口 for VC.NET
COM
组件
...
COM
_
组件
设计与应用
COM
_
组件
设计与应用(07)—编译、
注册
、调用
COM
_
组件
设计与应用(08)—实现多接口
COM
_
组件
设计与应用(09)—IDispatch_接口(VC6)
COM
_
组件
设计与应用(10)—IDispatch接口for VC.NET
COM
_
组件
设计与应用(11)—...
电子档案属性
组件
v3.0.0.1.zip
我们设计此多线程
ATL
COM
组件
,并提供友好的编程接口,供 同行软件公司免费使用,共同提高电子档案的管理水平。本产品开发的主要目的是为了推进档案行业信息技术的进一步发展,同时为学术界提供更好的软件实例素材...
com
自学视频教程
COM
组件
注册
与智能指针 内容提要: 1、
COM
组件
的
注册
2、智能指针的简介 3、智能指针的使用 4、智能指针与
COM
接口指针的比较 5、智能指针的注意点 七:《
COM
实用入门教程》第六讲:复合控件与C
Com
BSTR 内容...
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章