我正在尝试使用以下教程为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>
答案 0 :(得分:0)
我遇到了同样的问题,为我找到了一个有效的解决方案:
<强>解决方案:强> 将您的包装构建从 .exe 更改为 .dll
VS:
项目Properties->Configuration properties->General->Configuration Type->Dynamic Link Library (.dll)
<强>解释强>
我遇到了同样的问题,并将Project Properties->Configuration properties->C/C++->All Options->Conformance mode
从Yes (/permissive-)
更改为No
新构建表明链接器入口点错误:LNK1561
entry point must be defined
快速检查构建配置会显示错误的Configuration Type
(exe而不是dll)