社区
ATL
帖子详情
ATL com组件注册
lcy853142
2009-07-14 03:30:25
请教
我现在有两个com组件,我想将两个com组件注册到注册表中的同一个组下,同时提供一个GUID,通过这个GUID值
能够找到这个组,然后能够枚举出这个组下的所有com组件
请问怎么在rgs文件中修改
...全文
239
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
使用.rgs
注册
脚本文件操作
注册
表
注册
Com
组件
本文详细介绍了如何使用
ATL
创建和解析
注册
脚本(.rgs文件)来
注册
COM
服务,包括基本术语、分析树结构、示例以及调用API的方法。此外,还提供了一个非
ATL
向导生成的Win32控制台应用程序测试用例,演示如何在项目中添加和操作
注册
脚本。
怎么
注册
COM
,
ATL
组件
本文介绍了如何使用regsvr32.exe进行DLL文件的
注册
与卸载,并针对非管理员权限下出现的
注册
失败问题提供了具体的解决办法。
Atl
Com
组件
DLL非
注册
调用
本文介绍了如何通过动态链接库(DLL)方式加载并使用
COM
组件
。具体步骤包括:包含必要的头文件,定义函数指针加载DLL,调用DllGetClassObject函数创建类工厂对象,再通过类工厂对象创建实例,并调用接口方法。最后释放DLL资源。
利用
atl
中
注册
com
组件
的方法来访问
注册
表
本文介绍了一个基于
ATL
的
注册
表编辑器类CRegParser的实现细节。该类提供了预处理
注册
表脚本和
注册
表缓冲区的功能,并支持添加、删除
注册
表键值等操作。文中展示了部分关键代码及其功能。
ATL
3,248
社区成员
48,530
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章