C++ cli C++/CLI:错误C1190:&x27'/clr&x27;所需选项';包含';vcclr.h';

C++ cli C++/CLI:错误C1190:&x27'/clr&x27;所需选项';包含';vcclr.h';,c++-cli,C++ Cli,我有一个C++/CLI库,将由WPF应用程序使用。在这个库中,我试图将托管类型传递给只接受LPARAM参数的非托管函数。我尝试使用gcroot实现这一点。包含gcroot.h会抛出更多的编译器错误,因此我将vcclr.h包含进来 问题是,只要我包含vcclr.h头,编译器就会抛出以下错误: 致命错误C1190:托管代码需要“/clr”选项 但是在我的项目属性中,我已经在project properties->General和project properties->C/C++->General下为

我有一个C++/CLI库,将由WPF应用程序使用。在这个库中,我试图将托管类型传递给只接受
LPARAM
参数的非托管函数。我尝试使用
gcroot
实现这一点。包含
gcroot.h
会抛出更多的编译器错误,因此我将
vcclr.h
包含进来

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

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

但是在我的项目属性中,我已经在
project properties->General
project properties->C/C++->General
下为配置('Debug'和'Release')和所有平台('Win32'和'x64')启用了CLR支持

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

#using <mscorlib.dll>
#使用
例如,在DLL的主cpp文件中写入同一行似乎不会导致此错误

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



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

的问题,这是一个棘手的问题。通常情况下,如果你有“多条错误信息的方法”,然后选择一种方法进行检查,可能会在错误的一端消除混乱。 那么你的问题的答案是什么呢如果由于错误而要使用
,请不要使用
。最好在这里发布错误。

TLTR;在包含之前,请尝试使用
#ifdef_MANAGED
。这将避免任何其他编译单元在未使用“/CLR”编译代码时读取代码

如何调试大型项目中出现的大量错误

当然还有更好的方法,但有时我会回去确认我确实理解了我的编译错误

  • 找出发生错误的编译单元。
    • 编译您拥有的每个cpp文件。在解决方案资源管理器中右键单击该文件,然后搜索并单击“编译”。
      • 如果没有错误,则不是此文件
你找到了坏的

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

  • 在包含之前使用了
    #pragma mange(off)
    。 这被Microsoft文档视为该pragma的未定义行为。对不起:-/,我也知道了,在微软在12月更新VS2017之后
  • 有一个文件需要
    ,您执行了pimpl ideom,但有一个文件无法用
    /clr
    编译 好的,回到开始,重构您的项目,使其不包含来自那些非托管编译单元的“托管”头文件
    • 包装
      #在
      #ifdef#u管理中包含
      解决了问题。