扩展元帅库的问题

时间:2014-10-22 13:39:22

标签: c++-cli marshalling

我正在c ++ / cli中编写一个在C#和CryptoAPI之间进行转换的项目。因此我必须进行相当多的来回编组,在某些情况下,我已经扩展了编组库以使其中一些变得更容易。在某些情况下,当我编译时,我得到以下消息:

  

错误C4996:   “msclr ::互操作:: error_reporting_helper   ^,_ From_Type,false> :: marshal_as':不支持此转换   此转换所需的库或头文件不是   包括在内。请参阅有关如何:扩展的文档   Marshaling Library'用于添加您自己的编组方法。 C:\ PROGRAM   文件(x86)\ Microsoft Visual Studio 12.0 \ VC \ include \ msclr \ marshal.h

我知道错误意味着什么,在某些情况下,这是因为我忘了在课程中添加标题。但是,如果不是这样,那么很难追查到这个错误。由于实际错误指向marshal.h文件内部,因此没有任何线索(我可以看到)实际问题所在。我发现解决这个问题的唯一方法是每次编写一行使用编组的代码时,我必须停止并编译以确保特定行是正确的。你可以想象有多少会减慢我的速度。有谁知道更好的方法来找到这个错误发生的位置?

1 个答案:

答案 0 :(得分:2)

当我尝试这个时,它确实向我报告了一个行号。你能举例说明它没有吗?

我的测试代码:

int main(array<System::String ^> ^args)
{
    int i = 7;
    std::string foo = marshal_as<std::string>(i);
}

构建输出:

------ Build started: Project: QuickieCppCLI, Configuration: Debug x64 ------
  QuickieCppCLI.cpp
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\msclr\marshal.h(237): error C4996: 'msclr::interop::error_reporting_helper::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.
          with
          [
              _To_Type=std::string,
              _From_Type=int
          ]
          C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\msclr\marshal.h(217) : see declaration of 'msclr::interop::error_reporting_helper::marshal_as'
          with
          [
              _To_Type=std::string,
              _From_Type=int
          ]
          QuickieCppCLI.cpp(114) : see reference to function template instantiation '_To_Type msclr::interop::marshal_as(const _From_Type &)' being compiled
          with
          [
              _To_Type=std::string,
              _From_Type=int
          ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

请注意底部的第7行:QuickieCppCLI.cpp(114) : see reference to function template instantiation...。那是我主方法中的marshal_as行。