初始化 VCProjectEngineObject (Microsoft.VisualStudio.VCProjectEngine.dll) 时出现错误 80040154(类未注册异常)

Posted

技术标签:

【中文标题】初始化 VCProjectEngineObject (Microsoft.VisualStudio.VCProjectEngine.dll) 时出现错误 80040154(类未注册异常)【英文标题】:Error 80040154 (Class not registered exception) when initializing VCProjectEngineObject (Microsoft.VisualStudio.VCProjectEngine.dll) 【发布时间】:2011-04-30 14:59:27 【问题描述】:

我正在尝试运行this 工具,以便将Visual C++ 项目转换为makefile。 我正在尝试转换项目的项目是用 VS2008 编写的,所以我使用的是版本 9 中对 Microsoft.VisualStudio.VCProjectEngine.dll 的引用。

这行失败了:

VCProjectEngine vcprojEngine = new VCProjectEngineObject();

以下例外:

检索 COM 类工厂 具有 CLSID 的组件 D19A00C4-A7F9-4E14-A5E1-D060B7EB57F3 由于以下错误而失败: 80040154 类未注册 (来自 HRESULT 的异常:0x80040154 (REGDB_E_CLASSNOTREG))。

当尝试向 regsvr32 注册 VCProjectEngine.dll 时,我收到一个错误,即找不到入口点 DllRegisterServer。

有什么想法吗??

提前致谢。

【问题讨论】:

【参考方案1】:

这会失败的原因并不多,尤其是 regsvr32 步骤。在该 dll 上运行 dumpbin /exports。如果您没有看到 DllRegisterServer,那么您的安装已损坏。它应该有更多的副作用,你将无法再构建 C/C++ 项目。

一种标准故障模式是在 64 位操作系统上运行它。这是 32 位非托管代码,您确实会得到“类未注册”异常。项目 + 属性,构建选项卡,将平台目标更改为 x86。

【讨论】:

x86 目标平台是问题所在。谢谢! 刚刚遇到 64 位问题。谢谢一百万! @Hans Passant 对此还有什么想法吗?我正在为 x86 平台构建,但仍然收到 VB6 COM 互操作错误。我的构建机器是 Widows server 2008 R2 关于 x86 的那部分你应该完全加粗——我敢打赌 99% 的情况就是这样! @hans : 所以我的应用程序永远不能像 64 位进程一样运行?

以上是关于初始化 VCProjectEngineObject (Microsoft.VisualStudio.VCProjectEngine.dll) 时出现错误 80040154(类未注册异常)的主要内容,如果未能解决你的问题,请参考以下文章

直接初始化&拷贝初始化&值初始化

Java的初始化块

Kotlin类的初始化 ④ ( lateinit 延迟初始化 | ::属性名称.isInitialized 检查属性是否初始化 | lazy 惰性初始化 )

Kotlin类的初始化 ④ ( lateinit 延迟初始化 | ::属性名称.isInitialized 检查属性是否初始化 | lazy 惰性初始化 )

零初始化、静态初始化和值初始化有何不同?

类初始化与实例初始化