为了查找COM问题,我正在调试代码,并且似乎看到相同的GUID代表了不同的方式.
我的代码中有一行:class __declspec(uuid("{D4F83347-E58E-11d1-9D47-006008098294}"))
以及各种注册表之间的内容,然后调用:
CLSID clsid;
::CLSIDFromProgID("myProgId",&clsid);在调试器中,clsid显示为{000AFC9A-3347-D4F8-8EE5-D1119D470060}。对我来说,这太相似了,不可能不对,但我不能自动检查.我们有D4F8和3347,9D47,但是E58E变成了8EE5等等。
有什么方法可以让我理解为什么会发生这种情况,以及有什么方法可以让它们看起来一样来进行比较呢?
编辑以清除一些边跟踪,我已经检查了注册表中的CLSID,我们的注册脚本也是以{D4F83347-E58E-11d1-9D47-006008098294}的形式出现的,所以我认为uuid(...)上的问题与此无关。
发布于 2012-11-16 16:48:44
经过一些测试后,我发现问题只是视觉C++调试器是如何显示值的,仅此而已。例如,注册表值为{D4F83347-E58E-11d1-9D47-006008098294},对CLSIDFromProgID()的结果调用{D4F83347-E58E-11d1-9D47-006008098294},但在调试器中,MSVC++将变量显示为{000AFC9A-3347-D4F8-8EE5-D1119D470060}。
为什么要这么做,这是另一个问题!
发布于 2012-11-16 13:05:47
当您已经拥有guid时使用CLSIDFromProgID()没有多大意义。函数将"ProgId“字符串映射到CLSID {guid}。当然,重要的是要正确地注册这个程序。听起来肯定不是。当类已经使用__declspec(uuid)修饰时,只需使用uuidof()算子检索guid即可。
字节值的相似性表明您的注册代码被破坏了。
发布于 2012-11-16 13:08:36
“__declspec(Uuid)”只是与类的标识符的关联,没有其他的关联。使用CLSIDFromProgID API,您将使用系统注册表中的注册信息将ProgID解析为CLSID。也就是说,这两个人不一定要匹配。但是,它们通常是匹配的,但是如果您做的一切都很整洁,并且您的COM类注册的标识符与附加到C++类的源代码中的标识符相同。
https://stackoverflow.com/questions/13415333
复制相似问题