【问题标题】:Midl compiler error: 2214Midl 编译器错误:2214
【发布时间】:2014-05-19 08:17:10
【问题描述】:

我的项目(OCX)有一些问题:当我尝试在发布模式下编译时,编译停止并显示以下消息:

"1>C:\Program 文件 (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(1178,5): 错误 MSB6006:“midl.exe”以代码 2214 退出。”

我找不到任何对调试错误有用的信息,因为它不是错误代码,而是退出代码。我可以做什么? 它在开始解析“oaidl.acf”后立即停止。

【问题讨论】:

  • "MIDL2214:由于先前的错误,语义检查不完整。MIDL 编译器对输入文件进行两次传递以解决任何前向声明。由于在第一次传递期间遇到错误,检查第二遍尚未执行。与前向声明相关的未报告错误可能仍存在于文件中。 source
  • 好的,但是错误不是 MIDL2214 是 MSB6006。 2214 是 MIDL 的退出代码。是一样的吗?顺便说一句,即使我认为这是对错误的正确解释,我仍然无法调试问题。
  • 如果子程序未成功执行,则会引发 MSB6006。在这种情况下,MIDL 返回了一个错误。 MIDL 的错误代码描述出了什么问题。所以实际的错误是 MIDL2214。如果没有更多细节,很难猜测真正的原因是什么。如果它在调试模式下构建,但不是在发布模式下,我猜是缺少一些库引用或构建配置中的某些内容错误。
  • 我可以提供哪些详细信息?
  • 您可以尝试在命令提示符下运行 MIDL,看看它是否会打印一些更详细的错误信息。

标签: c++ visual-studio-2013 midl


【解决方案1】:

我在尝试编译在 VS2013 中升级的 OCX 项目时遇到了同样的错误。我必须打开 .odl 文件并将 #include 语句移动到库块中。

之前:

#include <olectl.h>
#include <idispids.h>

[ uuid(...), version(1.0), ... ]
library ...
{
    importlib(STDOLE_TLB);
    importlib(STDTYPE_TLB);

之后:

[ uuid(...), version(1.0), ... ]
library ...
{
    #include <olectl.h>
    #include <idispids.h>
    importlib(STDOLE_TLB);
    importlib(STDTYPE_TLB);

您也可以通过从 MIDL 设置中移除 /mktyplib203 开关来解决您的问题。

Project->Properties->Configuration Properties->MIDL->General->MkTypLib Compatible: Yes (/mktyplib203)

这和这个问题很相似:FIX: Platform SDK Causes MIDL to Throw MIDL2311 Error

MIDL2311 : statements outside library block are illegal in mktyplib compatibility mode.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 2018-04-03
    • 2012-02-02
    • 2020-07-27
    • 1970-01-01
    • 2011-03-16
    • 2021-05-01
    • 1970-01-01
    相关资源
    最近更新 更多