ATL产生的RGS文件介绍

引用:http://hi.baidu.com/71167609/blog/item/42c32819786f607fdbb4bd75.html

 

1、使用ATL向导的话,会在resource中产生一个rgs的注册脚本文件放在"REGISTRY"目录中用来注册组件,会在程序中通过函数DECLARE_REGISTRY_RESOURCEID(IDR_OPCSERVER)使用,IDR_OPCSERVER就是向导产生的资源文件的ID,当服务器调用CComModule::RegisterServer()时,便会使用这些脚本来载入注册表的设置,并在调用CComModule::UnregisterServer()时移除它们。所有COM的注册键都放在HKEY_CLASSES_ROOT中。

HKCR 表示注册表中COM对象的注册项是HKEY_CLASS_ROOT 的缩写;

NoRemove表示在反注册过程中不要删除这层注册表项;ForceRemove表示要要完全删除后面的项然后重新创建。

2、VC的ATL向导会生成com对象注册用的rgs文件。如果程序中有想写到注册表中的地方,可以手工编辑这个脚本,可以省去调用一堆操作注册表的API

关于rgs的详细规则,MSDN上面有,搜索ATL Registrar这个主题即可以看到,下面只是一点简单的介绍:

HKCR										//表示下面的注册表项都写到HKCR下面  
{
 SecEdit.EditCtrl.1 = s 'EditCtrl Class'    //表示在HKCR下面增加项 SecEdit.EditCtrl.1 ,s                         表示值的类型是字符串
 {
    CLSID = s '{E0E9F6EF-871B-42AE-89C9-CD6AF7A2E5D3}'
 }
 SecEdit.EditCtrl = s 'EditCtrl Class'
 {
    CLSID = s '{E0E9F6EF-871B-42AE-89C9-CD6AF7A2E5D3}'
    CurVer = s 'SecEdit.EditCtrl.1'
 }
 NoRemove CLSID							//表示在卸载时,不要把CLSID这个项给删除掉了

 {
   ForceRemove {E0E9F6EF-871B-42AE-89C9-CD6AF7A2E5D3} = s 'EditCtrl Class'
   {
     ProgID = s 'SecEdit.EditCtrl.1'
     VersionIndependentProgID = s 'SecEdit.EditCtrl'
     ForceRemove 'Programmable'
     InprocServer32 = s '%MODULE%'
     {
       val ThreadingModel = s 'Apartment' //val表示ThreadingModel是InprocServer32的值,不是                       子项
     }
     ForceRemove 'Control'
     ForceRemove 'Insertable'
     ForceRemove 'ToolboxBitmap32' = s '%MODULE%, 101'
     'MiscStatus' = s '0'
     {
        '1' = s '131473'
     }
     'TypeLib' = s '{42A31F29-B586-42B3-9F4A-45C73B38EA51}'
     'Version' = s '1.0'
   }
 }
}


 

 

你可能感兴趣的:(c,api,Module,脚本,服务器,Class)