C++ cli Marshall对象属性生成编译器错误 我正在使用BigDE类来处理非托管C++库。我对以下(简化的)示例代码有问题: ref class ManagedClass { private: UnManagedClass* m_UnManaged; String^ m_someString; public: UserAgent_Managed(String^ someString) { m_someString = someString; // Compiler error // Severity Code Description Project File Line Suppression State Error C2665 'msclr::interop::marshal_as': none of the 3 overloads could convert all the argument // types std::string unManagedString = msclr::interop::marshal_as<std::string>(m_someString); // Following works // std::string unManagedString = msclr::interop::marshal_as<std::string>(someString); m_UnManaged = new UnManagedClass(unManagedString); } }; ref类ManagedClass { 私人: 非托管类*m_非托管; 字符串^m\u someString; 公众: UserAgent\u托管(字符串^someString) { m_someString=someString; //编译错误 //严重性代码描述项目文件行抑制状态错误C2665“msclr::interop::marshal_as”:3个重载都无法转换所有参数 //类型 std::string unManagedString=msclr::interop::marshal_as(m_someString); //以下作品 //std::string unManagedString=msclr::interop::marshal_as(someString); m_UnManaged=新的非托管类(unManagedString); } };
当我调用std::string unManagedString=msclr::interop::marshal_as(m_someString)时使用对象属性C++ cli Marshall对象属性生成编译器错误 我正在使用BigDE类来处理非托管C++库。我对以下(简化的)示例代码有问题: ref class ManagedClass { private: UnManagedClass* m_UnManaged; String^ m_someString; public: UserAgent_Managed(String^ someString) { m_someString = someString; // Compiler error // Severity Code Description Project File Line Suppression State Error C2665 'msclr::interop::marshal_as': none of the 3 overloads could convert all the argument // types std::string unManagedString = msclr::interop::marshal_as<std::string>(m_someString); // Following works // std::string unManagedString = msclr::interop::marshal_as<std::string>(someString); m_UnManaged = new UnManagedClass(unManagedString); } }; ref类ManagedClass { 私人: 非托管类*m_非托管; 字符串^m\u someString; 公众: UserAgent\u托管(字符串^someString) { m_someString=someString; //编译错误 //严重性代码描述项目文件行抑制状态错误C2665“msclr::interop::marshal_as”:3个重载都无法转换所有参数 //类型 std::string unManagedString=msclr::interop::marshal_as(m_someString); //以下作品 //std::string unManagedString=msclr::interop::marshal_as(someString); m_UnManaged=新的非托管类(unManagedString); } };,c++-cli,marshalling,C++ Cli,Marshalling,当我调用std::string unManagedString=msclr::interop::marshal_as(m_someString)时
m_someString
,编译器告诉我没有匹配的marshal_as
方法签名。如果我对someString
参数执行相同的操作,编译器不会抛出错误。我错过了什么?m_someString
和someString
都具有类型String^
Thx函数的封送函数()不太友好,它缺少一个重载,无法编译此代码。您可以通过查看显示哪些重载可用的IntelliSense弹出窗口来解决这个问题。您尝试使用的是第四个:
std::string marshal_as<std::string, System::String^>(System::String^ const & _from_obj)
auto temp = this->m_someString; // Intentional temporary
auto str = marshal_as<std::string>(temp);