2017-12-13 16 views
-1

私は次のチュートリアル使用してC#クラスのためのC++ラッパーを構築しようとしている:私は、私がビルドし実行すると pragmateek C++ wrapper for C# classプロジェクトがビルドに失敗:「gcroot.hは、この文書は、別のプロジェクトで開かれた」

をこのエラーが出る:

Error C1001 An internal error has occurred in the compiler. [project name] C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.12.25827\include\msclr\gcroot.h 110

私はそれは、次のんのエラーをクリックしてください: VSが110

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

行目にgcroot.hを開き、私は複数のポップアップがすべての読み取りを促し得る:

"This document is opened by another project"


私はVS2017を使用しています、.NET 4.5

はこれにいくつかのトリック私は見ていないよはありますか? C++で使用するための.netクラスをラップする、より現代的/より標準的な方法がありますか?私の最終目標はC#で開発し、C++でクライアント用のAPIを提供することです。私のクライアントはプロジェクトに戻って戻ってきて、C#の人を失って、プロジェクトの一部をC++に切り替えることにしました。

私はすでにGoogleで長時間過ごしています。

更新: は、次のいずれかを追加するには、エラーをスローすることが発生します。

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

私はgroutです。ごめんなさい。そうしなければならなかった。 – user4581301

+0

それもまた*本当です! – fish

答えて

0

私は同じ問題を持っていたし、私のための実用的なソリューションを見つけました:

ソリューション:はあなたを変更 ラッパービルド.exeから .dll

VS: プロジェクトProperties->Configuration properties->General->Configuration Type->Dynamic Link Library (.dll)

を説明:LNK1561entry point must be defined

は、私は新しいビルドがリンカエントリポイントのエラーを示した同じ問題を持っていたし、No

Yes (/permissive-)からProject Properties->Configuration properties->C/C++->All Options->Conformance mode変更しましたビルド構成のクイックチェックにより、間違ったものが明らかになったConfiguration Type(dllの代わりにexe)

+0

ショートバージョン:correct – fish

+0

ロングバージョン:テストプロジェクトでこれを行うのを忘れていて、依存するラッパークラスがDLLの「リリース」バージョンを使用していたため、リンクが正しく設定されていなかったリリースのためにビルドしていない私に。 – fish

関連する問題