社区
ATL
帖子详情
ATL com组件注册
lcy853142
2009-07-14 03:30:25
请教
我现在有两个com组件,我想将两个com组件注册到注册表中的同一个组下,同时提供一个GUID,通过这个GUID值
能够找到这个组,然后能够枚举出这个组下的所有com组件
请问怎么在rgs文件中修改
...全文
203
12
打赏
收藏
ATL com组件注册
请教 我现在有两个com组件,我想将两个com组件注册到注册表中的同一个组下,同时提供一个GUID,通过这个GUID值 能够找到这个组,然后能够枚举出这个组下的所有com组件 请问怎么在rgs文件中修改
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
组件
创建和调用.zip
ATL
COM
组建的创建和调用示例, 采用VS进行开发,可参考
COM
初学者,使用
ATL
创建
COM
组件
初学
COM
,使用
ATL
创建
COM
组件
,并测试
COM
组件
的小例子
手写
ATL
COm
组件
文章配套代码 http://blog.csdn.net/dragronboy/article/details/8991923
配套代码,
ATL
Com
组件
http://blog.csdn.net/dragronboy/article/details/8991923配套代码
手写
ATL
COM
组件
示例代码
手写
ATL
COM
组件
示例代码,手写
ATL
COM
组件
示例代码
ATL
3,248
社区成员
48,529
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章