例如:HKCR
{
Simple8.DispSimple.1 = s 'DispSimple Class'
{
CLSID = s '{8C98D25A-43CA-48AD-986F-EB0065251C52}'
}
Simple8.DispSimple = s 'DispSimple Class'
{
CurVer = s 'Simple8.DispSimple.1'
}
NoRemove CLSID
{
ForceRemove {8C98D25A-43CA-48AD-986F-EB0065251C52} = s 'DispSimple Class'
{
ProgID = s 'Simple8.DispSimple.1'
VersionIndependentProgID = s 'Simple8.DispSimple'
ForceRemove Programmable
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
TypeLib = s '{102B5748-138A-4432-87C2-9CC689D16F41}'
Version = s '1.0'
}
}
}
编译了以后我搜索注册表,发现这是个类型库的键值,在CLSID=8C98D25A-43CA-48AD-986F-EB0065251C52下面。
但是idl文件里面声明的接口id如下,却没有在rgs文件里面。但是在注册表里面可以找到:(这个在注册表HKCR\Interface下面)[
object,
uuid(5F882D6A-CAAC-45D4-A8AA-7F83AFDA3E23),
dual,
nonextensible,
pointer_default(unique)
]
interface IDispSimple : IDispatch{
[id(1)] HRESULT Add([in] VARIANT n1, [in] VARIANT n2, [out,retval] VARIANT* pVal);
[id(2)] HRESULT Upper([in] BSTR str, [out,retval] BSTR* pVal);
};
我的问题是: 为什么rgs文件里面没有包含接口的SID ?
谢谢!
{
Simple8.DispSimple.1 = s 'DispSimple Class'
{
CLSID = s '{8C98D25A-43CA-48AD-986F-EB0065251C52}'
}
Simple8.DispSimple = s 'DispSimple Class'
{
CurVer = s 'Simple8.DispSimple.1'
}
NoRemove CLSID
{
ForceRemove {8C98D25A-43CA-48AD-986F-EB0065251C52} = s 'DispSimple Class'
{
ProgID = s 'Simple8.DispSimple.1'
VersionIndependentProgID = s 'Simple8.DispSimple'
ForceRemove Programmable
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
TypeLib = s '{102B5748-138A-4432-87C2-9CC689D16F41}'
Version = s '1.0'
}
}
}
编译了以后我搜索注册表,发现这是个类型库的键值,在CLSID=8C98D25A-43CA-48AD-986F-EB0065251C52下面。
但是idl文件里面声明的接口id如下,却没有在rgs文件里面。但是在注册表里面可以找到:(这个在注册表HKCR\Interface下面)[
object,
uuid(5F882D6A-CAAC-45D4-A8AA-7F83AFDA3E23),
dual,
nonextensible,
pointer_default(unique)
]
interface IDispSimple : IDispatch{
[id(1)] HRESULT Add([in] VARIANT n1, [in] VARIANT n2, [out,retval] VARIANT* pVal);
[id(2)] HRESULT Upper([in] BSTR str, [out,retval] BSTR* pVal);
};
我的问题是: 为什么rgs文件里面没有包含接口的SID ?
谢谢!
组件对象注册 是不需要注册自身接口的,具体是创建组件的时候 QueryInterface 内部来判断接口支持的
如果仅进程内部使用,接口不需要注册 当接口需要列集时(比如跨进程) 接口需要注册自己的代理处理(可以查看HKRK下 interface子键)