项目无法构建:“gcroot.h此文档由另一个项目打开”

时间:2017-12-13 23:22:13

标签: c++ build compiler-errors visual-studio-2017 wrapper

我正在尝试使用以下教程为C#类构建C ++包装器: pragmateek C++ wrapper for C# class

当我运行build时,我收到此错误:

  

错误C1001编译器中发生内部错误。 [项目名称] C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ VC \ Tools \ MSVC \ 14.12.25827 \ include \ msclr \ gcroot.h 110

当我点击错误时,它会执行以下操作: VS将gcroot.h打开到第110行

void swap( gcroot<T> & _right )
    { //VS shows error on this line
            using std::swap;
            swap( _handle, _right._handle );
    }

我得到多个弹出提示全部阅读:

  

“此文档由另一个项目打开”

我正在使用VS2017,.net 4.5

我有没有看到一些技巧?是否有更好或更现代/规范的方法来包装.net类以便在C ++中使用?我的最终目标是使用C#进行开发,并在C ++中为客户端提供API。我的客户进入项目太远而无法转回,然后失去了他们的C#家伙,现在希望我将项目的一部分转换为C ++。

我已经花了很多时间在谷歌上。

更新: 添加以下任一项会导致它抛出错误:

#include <vcclr.h>
#include <msclr\auto_gcroot.h>

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,为我找到了一个有效的解决方案:

<强>解决方案: 将您的包装构建从 .exe 更改为 .dll

VS: 项目Properties->Configuration properties->General->Configuration Type->Dynamic Link Library (.dll)

<强>解释 我遇到了同样的问题,并将Project Properties->Configuration properties->C/C++->All Options->Conformance modeYes (/permissive-)更改为No

新构建表明链接器入口点错误:LNK1561 entry point must be defined

快速检查构建配置会显示错误的Configuration Type(exe而不是dll)