C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – ATL COM类注册.rgs文件默认值大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在创建一个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接口的指针.

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

我正在使用Visual studio 2010.

解决方法

那是coclass的ProgID.它主要由脚本语言使用,即使用后期绑定的语言. CreateObject()是通常的函数名称.这与挂起有关是无法解释的,你最好调试它.

否则.rgs条目由ATL向导自动生成. ProgID编辑框是右下角的编辑框.它不会像其他人一样自动填充,你可能会错过它.

大佬总结

以上是大佬教程为你收集整理的c – ATL COM类注册.rgs文件默认值全部内容,希望文章能够帮你解决c – ATL COM类注册.rgs文件默认值所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。