无法包含msclr \ marshal_cppstd.h-_This_conversion_is_not_supported

时间:2018-09-21 00:05:00

标签: c++ visual-studio-2017 c++-cli interop

我有一个CLI项目,该项目使用元帅将String ^转换为std :: string。 出于某种原因,当我包含标头时,会出现这些似乎不明白的编译错误。

即使我没有对marshal_as进行任何调用,我仍然会收到编译错误。

我一直在网上寻找帮助。

也许您可以提供帮助?

代码:

#include <msclr\marshal_cppstd.h>


namespace ConnectionWrapper
{
  inline std::string ToStdString(System::String^ str)
  {
    return msclr::interop::marshal_as<std::string>(str);
  }

  inline System::String^ ToCliString(const std::string std)
  {
    return msclr::interop::marshal_as<System::String^>(std);
  }
}

编译错误:

1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.15.26726\include\msclr\marshal.h(222): error C3861: '_This_conversion_is_not_supported': identifier not found
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.15.26726\include\msclr\marshal.h(224): note: see reference to class template instantiation 'msclr::interop::error_reporting_helper<_To_Type,_From_Type,false>' being compiled
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.15.26726\include\msclr\marshal.h(233): error C3861: '_This_conversion_requires_a_context': identifier not found
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.15.26726\include\msclr\marshal.h(235): note: see reference to class template instantiation 'msclr::interop::error_reporting_helper<_To_Type,_From_Type,true>' being compiled

2 个答案:

答案 0 :(得分:0)

我解决了问题。虽然我不太了解如何。 -我关闭了/ permissive标志-一切正常

答案 1 :(得分:0)

非常感谢这个建议,我遇到了同样的问题。

关闭/permissive标志可以解决该问题。顺便说一句,我注意到Windows的C ++ CLR空项目(/ SUBSYSTEM:WINDOWS)的标志已关闭,而Windows控制台项目已将其打开(VS 2017 / .Net 4.7)。