Visual studio 2010 窗口7上的ATL COM DLL注册无法更新CLSID节,但TypeLib有效

Visual studio 2010 窗口7上的ATL COM DLL注册无法更新CLSID节,但TypeLib有效,visual-studio-2010,visual-c++,mfc,registry,atl,Visual Studio 2010,Visual C++,Mfc,Registry,Atl,我们正在进行一个ATL COM DLL迁移项目,将代码从VC++6迁移到VC++10,而对象映射未能加载 这基本上与客户遇到的问题相同 DLL显示为已成功注册,并显示在typelib中,但未显示在CLSID中。 现有代码与Windows XP上的VC6配合使用效果良好,但与Windows 7上的VC10配合使用效果不佳。 使用VC10中的atlbase.h的DLLRegisterServer进行注册是公平的标准 有什么想法吗 我们认为stackoverflow社区更加活跃,知识更加丰富。 我们

我们正在进行一个ATL COM DLL迁移项目,将代码从VC++6迁移到VC++10,而对象映射未能加载

这基本上与客户遇到的问题相同

DLL显示为已成功注册,并显示在typelib中,但未显示在CLSID中。 现有代码与Windows XP上的VC6配合使用效果良好,但与Windows 7上的VC10配合使用效果不佳。

使用VC10中的atlbase.h的DLLRegisterServer进行注册是公平的标准

有什么想法吗

我们认为stackoverflow社区更加活跃,知识更加丰富。 我们遗漏的任何其他信息,请询问,我们也将提供

非常感谢

编辑: 我是一名管理员,在32位Windows7上进行32位应用程序测试。
我已在整个注册表中搜索CLSID,但仍然找不到它。

请尝试使用
object\u ENTRY\u AUTO
宏注册您的对象。在每个对象的标题中,在类声明后放置对条目的引用,例如:

class CMyObject { ... class decl ... };
OBJECT_ENTRY_AUTO(__uuidof(MyObject), CMyObject)

如果这不起作用,您需要通过调试器运行它(使用regsvr32作为EXE),并观察DllRegisterServer中发生的情况。

实际上,Win7中有一些CLSID重定向机制。谷歌它,你会得到大量的资源。32/64位组件?32/64位Windows?regsvr32是否成功?请检查以下内容。。谢谢大家。我们已经在32位Windows7上尝试过了,这个应用也是32位的。我现在正在研究重定向机制。如果您尝试运行:regsvr32 YourComponent.dll会发生什么?我们也尝试过这个MARCO。CLSID的条目映射为空。当我们使用VC6构建时,代码是有效的。这可能是VC10的ATL库中的一个bug吗?我会很惊讶的。有很多人依赖VC10的ATL代码。AtlcomoduleRegisterServer是否至少进入“for”循环,即映射中的对象?如果它在映射中,但CLSID为空,请尝试使用IID_MyObject而不是u uuidof(MyObject)。