gpt4 book ai didi

c++ - ATL COM 类注册 .rgs 文件默认值

转载 作者:可可西里 更新时间:2023-11-01 18:34:46 24 4
gpt4 key购买 nike

我正在创建 COM 服务器可执行文件,但遇到了类注册问题。当我创建类对象时,自动生成的 .rgs 文件如下所示:

HKCR
{
NoRemove CLSID
{
ForceRemove {4C6DAD45-64B4-4C55-81C6-4CE125226421} = s 'Test Class'
{
ForceRemove Programmable
LocalServer32 = s '%MODULE%'
{
val ServerExecutable = s '%MODULE_RAW%'
}
TypeLib = s '{EAA173CA-BDBC-463A-8B7A-B010EFA467BC}'
Version = s '1.0'
}
}
}

这为 CLSID 正确创建了注册表项。但是,在尝试从外部调用 CoCreateInstance 时,我遇到了挂起。

hr = CoCreateInstance( __uuidof(Test), NULL, CLSCTX_ALL, __uuidof(ITest), (void**)&pTest);

在查看了其他几个项目的示例后,我注意到它们都有以下类型的注册表项:

HKEY_CLASSES_ROOT\<MODULE>.<CLASS>
HKEY_CLASSES_ROOT\<MODULE>.<CLASS>\CLSID

我调查了这些类的 .rgs 文件,发现它们有额外的条目,但我的 .rgs 文件中没有。我将它们添加到我的,并将其更改为:

HKCR
{
TestModule.Test = s 'Test Class'
{
CLSID = s '{4C6DAD45-64B4-4C55-81C6-4CE125226421}'
}

NoRemove CLSID
{
ForceRemove {4C6DAD45-64B4-4C55-81C6-4CE125226421} = s 'Test Class'
{
ForceRemove Programmable
LocalServer32 = s '%MODULE%'
{
val ServerExecutable = s '%MODULE_RAW%'
}
TypeLib = s '{EAA173CA-BDBC-463A-8B7A-B010EFA467BC}'
Version = s '1.0'
}
}
}

你瞧,我的 CoCreateInstance 调用不再挂起,我能够正确检索指向 ITest 接口(interface)的指针。

现在,我的问题是,考虑到上述细节,我如何才能确保我创建的任何 future 类都具有正确的 .rgs 文件格式?创建类对象时是否缺少某些选项?或者我是否需要为我创建的每个类手动添加以上内容?

我使用的是 Visual Studio 2010。

最佳答案

这是 coclass 的 ProgID。它主要由使用后期绑定(bind)的脚本语言使用。 CreateObject()是通常的函数名称。这和挂起有什么关系,无法解释,你最好调试一下。

.rgs 条目由 ATL 向导自动生成。 ProgID 编辑框在右下方。它不会像其他内容一样自动填写,您可能错过了。

关于c++ - ATL COM 类注册 .rgs 文件默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5725424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com