如何使用marshap_cppstd.h将带有命名空间接口的头文件包含到c ++ / cli项目中

时间:2013-03-08 10:15:53

标签: c++ c++-cli marshalling

在尝试编译使用本机库的c ++ / cli库时,我遇到了几个错误,而c ++ / cli项目包含用于编组的msclr帮助程序。如果我添加以下标题

#include <msclr\marshal_cppstd.h>

我收到错误

Error   1   error C2059: syntax error : '<class-head>'

还有其他几位跟进。

语法错误指向外部(第三方)c ++ lib的头文件(因此我无法更改标头)。

namespace SomeExternalLibNamespace
{
   namespace interface // problem might be here (interface is a keyword in c++/cli)
   {

如果我不包含marshal_cppstd.h并使用自己的方法手动编组,一切都可以编译并正常工作。

3 个答案:

答案 0 :(得分:1)

问题是外部c ++库命名为命名空间 interface 。这是c ++ / cli中的关键字。当包含此lib的c ++头文件(以及名为 interface 的命名空间)并包含该库的c ++ / cli-wrapper时,此lib的c + / cli-wrapper的visual studio解析器/编译器会被破坏助手的标题,例如在marshap_cppstd.h中也是如此。

如果不自行编组而不使用ms-helpers,我无法解决这个问题。

答案 1 :(得分:0)

我的错,没有正确阅读,如果'interface'确实是一个关键字,那么这显然是错误的原因,请尝试使用:namespace interface_例如,然后重新编译以检查结果。

答案 2 :(得分:-2)

你应该使用引号:“”包括自定义标题文件:

#include "msclr\marshal_cppstd.h"