問題タブ [c++-cli]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linker - 混合モード アプリケーションをリンクするには、どのライブラリが必要ですか?
.NET サポートを C++ アプリケーションに統合しています。
これは昔ながらの MFC アプリケーションであり、CWinFormsControl を参照する "/clr" オプションを使用してコンパイルされた 1 つの追加ファイルがあります。
リンカー フラグ "/NODEFAULTLIB" を削除することはできません。
(Visual Studio ではなく、独自のビルド管理システムを使用しています。)
つまり、必要なすべてのライブラリ (VC ランタイムと MFC) を指定する必要があります。
その他のコンパイラ オプションには、「/MD」が含まれます
次に: リンカー フラグ "/FORCE:MULTIPLE" を使用できず、すべてを追加するだけです
。重複しないライブラリ セットを探しています。
compiler-construction - Mixed C++/CLI TypeLoadException 内部制限: フィールドが多すぎます
いくつかの新しい UI をマネージド/C# ランドに移行するために、最近、大規模なレガシー プロジェクトで共通言語ランタイム サポート (/clr) を有効にしました。全体的なソリューション。このプロジェクトはアプリケーションのコアであり、生成されたマネージ UI コードを駆動します (したがって、相互運用のために clr サポートを有効にする必要があります)。
大量の小さなエラーと警告を修正した後、最終的にアプリケーションをコンパイルすることができました..しかし、アプリケーションを実行すると EETypeLoadException が発生し、デバッグできなくなります...
掘り下げてみると、原因は「System.TypeLoadException: 内部制限: フィールドが多すぎます」であることがわかりました。これはコンパイルの最後に発生します。次に、アセンブリを2つ以上のdllに分割することを提案するこのリンクを見つけました。ただし、これは私の場合は不可能です。レガシー コードは基本的に変更されないという制限があるためです。
誰でも他の可能な解決策を提案できますか? 私は本当にここで行き止まりです。
.net - C++/CLI で char* と System::String の間で変換する最良の方法は何ですか?
char* から System::string に変換して C++/CLI に戻す承認された方法は何ですか? Google で marshal_to<> テンプレート関数への参照をいくつか見つけましたが、この機能は Visual Studio 2005 には採用されていないようです (また、Visual Studio 2008 にもありません、AFAIK)。また、 Stan Lippman のブログでいくつかのコードを見たことがありますが、それは 2004 年のものです。Marshal::StringToHGlobalAnsi() も見ました。「ベストプラクティス」と見なされる方法はありますか?
c# - C++/CLI を C# に変換
C++/CLI の小規模から中規模のプロジェクトがあります。私は C++/CLI の構文拡張が大嫌いで、C# で作業したいと思っています。一方を他方に変換する適切な仕事をするツールはありますか?
編集:明らかにc++/CLIを意味する前にマネージドc++と言ったとき
.net - 親の Clone() メソッドをオーバーライドするようにすべての子を強制する方法は?
すべての派生 C++/CLI クラスが基本クラスの ICloneable::Clone() メソッドをオーバーライドすることを確認するにはどうすればよいですか?
私はこれについて心配する必要があると思いますか?それとも、これは基本クラスの作成者の責任ではありませんか?
修正:申し訳ありませんが、基本クラスが非抽象クラスであることを忘れていました。
.net - C++/CLI で std::vector<>::iterator を .NET インターフェイスに変換する
次のメソッドを持つネイティブ C++ クラスをラップしています。
1) この同じ種類のインターフェイスを表す ".NET の方法" は何ですか? 配列を返す単一のメソッド<>? array<> ジェネリックには反復子があるので、BeginLocals() と EndLocals() を実装できますか?
2) Localは .NET ラッパーで値構造体として宣言する必要がありますか?
ラップされたクラスを .NET フレーバーで表現したいのですが、管理された世界に慣れていないので、この種の情報をグーグルで検索するのはイライラします...
.net - C++/CLI プロパティによるダブルサンクの回避
メソッドがアンマネージ コードから呼び出されないことがわかっている場合は、関数呼び出しで __clrcall デコレータを使用してダブルサンクを回避する必要があることを(Nish Sivakumar の著書C++/CLI In Actionなどで) 読みました。Nish はまた、メソッド シグネチャに CLR 型が含まれている場合、JIT コンパイラは自動的に __clrcall を追加すると述べています。C++/CLI プロパティを作成するときに __clrcall を含める必要があるかどうかはわかりません。ある意味では、プロパティは .NET 言語からのみアクセスできます。一方、C++/CLI コンパイラ (私が思うに) は、マネージ コードとアンマネージ コードの両方から呼び出し可能なメソッド (例: ***_get() ) を生成するだけです。では、プロパティで __clrcall 修飾子を使用する必要がありますか? もしそうなら、それはどこに行きますか? 取得/設定機能自体について?
.net - マネージ C++ メソッドの命名
文字列を返すメソッドを実装するためにマネージ C++ を使用しています。次の署名を使用して、ヘッダー ファイルでメソッドを宣言します。
ただし、C# からこのメソッドを使用している場合、署名は次のとおりです。
メソッド名の末尾にある余分な「W」を削除するにはどうすればよいですか?
c# - C++\CLI での列挙型の変換に関する問題
.Net によって提供されるいくつかの列挙を使用する、C++\CLI で記述されたアセンブリがあります。次のようなプロパティがあります。
正常に動作しますが、C# コードからこのアセンブリを使用すると、このプロパティの型は
そして私は型キャストをしなければなりません
質問は簡単です。なぜそうなのか、どうすれば修正できるのでしょうか。
.net - C++/CLI ラッパー クラスの例外を変換するためのベスト プラクティス
例外をスローする既存のネイティブ クラスの .NET ラッパー クラスを作成しています。ネイティブ C++ 例外とマネージ例外を変換するためのベスト プラクティスは何ですか? 1 対 1 でキャッチして再スローしますか (例: std::invalid_argument -> System.System.ArgumentException)? すでにどこかにマッピングが作成されていますか?