我有一个将由WPF应用程序使用的C ++ / CLI库。在这个库中,我试图将托管类型传递给仅接受LPARAM
参数的非托管函数。我尝试实现这一点是使用gcroot
。包括gcroot.h
会引发更多的编译器错误,所以我改为包含vcclr.h
。
问题是,只要我包含vcclr.h
标头,编译器就会抛出以下错误:
致命错误C1190:托管代码需要' / clr'选项
但在我的项目属性中,我已经在Project properties -> General
和Project properties -> C/C++ -> General
下启用了CLR支持配置(' Debug'和#39; Release')以及所有平台(' Win32'和' x64')。
错误发生在vcclr.h
的以下行:
#using <mscorlib.dll>
在DLL的主cpp文件中编写相同的行似乎不会导致此错误。
我正在为我的项目使用的平台工具集是Visual Studio 2017 (v141)
。
我知道关于此错误还有大约五个其他问题。但就我而言,没有一个答案可以帮助我解决我的问题。这同样适用于有关gcroot
的问题。
答案 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”编译的情况下读取代码。
如何调试在更大的项目中发生的大量错误?
肯定有更好的方法,但有时我会回去确保我理解我的编译错误。
你找到了坏人。
现在您将找到几个原因并根据这些选项:
#ifdef _MANAGED
。
这被认为是该编译指示的Microsoft文档的未定义行为。对不起: - /,我在12月微软更新了VS2017后也了解到了这一点。#pragma manged(off)
并且您执行了pimpl-ideom并且您确实有一个无法使用<thread> or <mutex>
编译的文件
好吧,回到开始,重构你的项目不包括来自那些未托管的编译单元的“托管”头文件。