我正在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文件内部,因此没有任何线索(我可以看到)实际问题所在。我发现解决这个问题的唯一方法是每次编写一行使用编组的代码时,我必须停止并编译以确保特定行是正确的。你可以想象有多少会减慢我的速度。有谁知道更好的方法来找到这个错误发生的位置?
答案 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
行。