marshal String ^ to string。使用marshal.h收到错误

时间:2014-04-25 13:49:29

标签: .net string c++-cli marshalling mixed-mode

我在班上有这两个

#include <msclr/marshal.h>
#include <msclr/marshal_cppstd.h>

我有

using namespace msclr::interop;

我正在使用它将String ^编组为字符串。这是一个例子。

string ProgReleaseType = marshal_as<std::string>(CurrentSubKey->GetValue("ReleaseType", NULL)->ToString());

当我构建时,我收到此错误。

Error   53  error C4996: msclr::interop::error_reporting_helper<_To_Type,_From_Type,false>::marshal_as': This conversion is not supported by the library or the header file needed for this conversion is not included.  Please refer to the documentation on 'How to: Extend the Marshaling Library' for adding your own marshaling method.    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\msclr\marshal.h  237

当我进入marshal.h并阅读第237行时,请说使用marshal_context。我以为我是。我不明白它不喜欢的东西。

3 个答案:

答案 0 :(得分:2)

我无法按照描述重现此错误。如果我包含msclr\marshal.h但不包含msclr\marshal_cppstd.h,则会出现错误。仔细检查您是否包含它,或者可能将其明确地包含在您的cpp文件中的第一行。

这是我的测试应用程序:

#include <msclr\marshal.h>
#include <msclr\marshal_cppstd.h>

using namespace msclr::interop;
using namespace System;
using namespace System::Diagnostics;

int main(array<System::String ^> ^args)
{
    String^ str = "Something";

    std::string stdstr = marshal_as<std::string>(str);

    stdstr[4] = '-';

    // Convert back to managed for printing.
    Debug::WriteLine(marshal_as<String^>(stdstr));

    return 0;
}

输出:

  

一些兴

答案 1 :(得分:1)

使用编组上下文:

 msclr::interop::marshal_context context;

string ProgReleaseType = context.marshal_as<std::string>(CurrentSubKey->GetValue("ReleaseType", NULL)->ToString());

答案 2 :(得分:1)

我希望这个答案可以帮到你。

  1. 添加标题

     #include <msclr\marshal_cppstd.h>
    
  2. 以下是String ^ to string(标准字符串)

    的示例代码
      String^ str ="Sample string";
      msclr::interop::marshal_as<std::string>(str)