C ++ / CLI:错误C1190:'' / clr'需要选项'在包含' vcclr.h'

时间:2018-04-07 17:27:45

标签: c++-cli

我有一个将由WPF应用程序使用的C ++ / CLI库。在这个库中,我试图将托管类型传递给仅接受LPARAM参数的非托管函数。我尝试实现这一点是使用gcroot。包括gcroot.h会引发更多的编译器错误,所以我改为包含vcclr.h

问题是,只要我包含vcclr.h标头,编译器就会抛出以下错误:

  

致命错误C1190:托管代码需要' / clr'选项

但在我的项目属性中,我已经在Project properties -> GeneralProject properties -> C/C++ -> General下启用了CLR支持配置(' Debug'和#39; Release')以及所有平台(' Win32'和' x64')。

错误发生在vcclr.h的以下行:

#using <mscorlib.dll>

在DLL的主cpp文件中编写相同的行似乎不会导致此错误。

我正在为我的项目使用的平台工具集是Visual Studio 2017 (v141)

我知道关于此错误还有大约五个其他问题。但就我而言,没有一个答案可以帮助我解决我的问题。这同样适用于有关gcroot的问题。

1 个答案:

答案 0 :(得分:1)

这是一个棘手的问题。一般来说,如果你有“通过多条错误消息的方式”然后选择过去的方式可能会在错误的一端切断混乱。 所以关于你的问题的答案。 如果由于错误而要使用[ERROR] [ERROR] Some problems were encountered while processing the POMs: [ERROR] The build could not read 1 project -> [Help 1] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException Build step 'Invoke Artifactory Maven 3' changed build result to FAILURE Build step 'Invoke Artifactory Maven 3' marked build as failure ,请不要使用<vcclr.h>。最好在这里发布错误。

TLTR;尝试在包含之前使用<gcroot.h>。这样可以避免任何其他编译单元在没有用“/ CLR”编译的情况下读取代码。

如何调试在更大的项目中发生的大量错误?

肯定有更好的方法,但有时我会回去确保我理解我的编译错误。

  • 找出哪个编译单元会出错。
    • 编译自己拥有的每个cpp文件。右键单击解决方案资源管理器中的文件,然后搜索并单击以进行编译。
      • 如果没有错误,则不是此文件。

你找到了坏人。

现在您将找到几个原因并根据这些选项:

  • 您在包含之前使用了#ifdef _MANAGED。 这被认为是该编译指示的Microsoft文档的未定义行为。对不起: - /,我在12月微软更新了VS2017后也了解到了这一点。
  • 有一个文件需要#pragma manged(off)并且您执行了pimpl-ideom并且您确实有一个无法使用<thread> or <mutex>编译的文件 好吧,回到开始,重构你的项目不包括来自那些未托管的编译单元的“托管”头文件。