問題タブ [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.

0 投票する
3 に答える
1157 参照

linker - 混合モード アプリケーションをリンクするには、どのライブラリが必要ですか?

.NET サポートを C++ アプリケーションに統合しています。
これは昔ながらの MFC アプリケーションであり、CWinFormsControl を参照する "/clr" オプションを使用してコンパイルされた 1 つの追加ファイルがあります。

リンカー フラグ "/NODEFAULTLIB" を削除することはできません。
(Visual Studio ではなく、独自のビルド管理システムを使用しています。)
つまり、必要なすべてのライブラリ (VC ランタイムと MFC) を指定する必要があります。

その他のコンパイラ オプションには、「/MD」が含まれます

次に: リンカー フラグ "/FORCE:MULTIPLE" を使用できず、すべてを追加するだけです
。重複しないライブラリ セットを探しています。

0 投票する
3 に答える
3278 参照

compiler-construction - Mixed C++/CLI TypeLoadException 内部制限: フィールドが多すぎます

いくつかの新しい UI をマネージド/C# ランドに移行するために、最近、大規模なレガシー プロジェクトで共通言語ランタイム サポート (/clr) を有効にしました。全体的なソリューション。このプロジェクトはアプリケーションのコアであり、生成されたマネージ UI コードを駆動します (したがって、相互運用のために clr サポートを有効にする必要があります)。

大量の小さなエラーと警告を修正した後、最終的にアプリケーションをコンパイルすることができました..しかし、アプリケーションを実行すると EETypeLoadException が発生し、デバッグできなくなります...

掘り下げてみると、原因は「System.TypeLoadException: 内部制限: フィールドが多すぎます」であることがわかりました。これはコンパイルの最後に発生します。次に、アセンブリを2つ以上のdllに分割することを提案するこのリンクを見つけました。ただし、これは私の場合は不可能です。レガシー コードは基本的に変更されないという制限があるためです。

誰でも他の可能な解決策を提案できますか? 私は本当にここで行き止まりです。

0 投票する
5 に答える
68323 参照

.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() も見ました。「ベストプラクティス」と見なされる方法はありますか?

0 投票する
5 に答える
16865 参照

c# - C++/CLI を C# に変換

C++/CLI の小規模から中規模のプロジェクトがあります。私は C++/CLI の構文拡張が大嫌いで、C# で作業したいと思っています。一方を他方に変換する適切な仕事をするツールはありますか?

編集:明らかにc++/CLIを意味する前にマネージドc++と言ったとき

0 投票する
9 に答える
756 参照

.net - 親の Clone() メソッドをオーバーライドするようにすべての子を強制する方法は?

すべての派生 C++/CLI クラスが基本クラスの ICloneable::Clone() メソッドをオーバーライドすることを確認するにはどうすればよいですか?

私はこれについて心配する必要があると思いますか?それとも、これは基本クラスの作成者の責任ではありませんか?

修正:申し訳ありませんが、基本クラスが非抽象クラスであることを忘れていました。

0 投票する
2 に答える
6897 参照

.net - C++/CLI で std::vector<>::iterator を .NET インターフェイスに変換する

次のメソッドを持つネイティブ C++ クラスをラップしています。

1) この同じ種類のインターフェイスを表す ".NET の方法" は何ですか? 配列を返す単一のメソッド<>? array<> ジェネリックには反復子があるので、BeginLocals() と EndLocals() を実装できますか?

2) Localは .NET ラッパーで値構造体として宣言する必要がありますか?

ラップされたクラスを .NET フレーバーで表現したいのですが、管理された世界に慣れていないので、この種の情報をグーグルで検索するのはイライラします...

0 投票する
1 に答える
1403 参照

.net - C++/CLI プロパティによるダブルサンクの回避

メソッドがアンマネージ コードから呼び出されないことがわかっている場合は、関数呼び出しで __clrcall デコレータを使用してダブルサンクを回避する必要があることを(Nish Sivakumar の著書C++/CLI In Actionなどで) 読みました。Nish はまた、メソッド シグネチャに CLR 型が含まれている場合、JIT コンパイラは自動的に __clrcall を追加すると述べています。C++/CLI プロパティを作成するときに __clrcall を含める必要があるかどうかはわかりません。ある意味では、プロパティは .NET 言語からのみアクセスできます。一方、C++/CLI コンパイラ (私が思うに) は、マネージ コードとアンマネージ コードの両方から呼び出し可能なメソッド (例: ***_get() ) を生成するだけです。では、プロパティで __clrcall 修飾子を使用する必要がありますか? もしそうなら、それはどこに行きますか? 取得/設定機能自体について?

0 投票する
3 に答える
414 参照

.net - マネージ C++ メソッドの命名

文字列を返すメソッドを実装するためにマネージ C++ を使用しています。次の署名を使用して、ヘッダー ファイルでメソッドを宣言します。

ただし、C# からこのメソッドを使用している場合、署名は次のとおりです。

メソッド名の末尾にある余分な「W」を削除するにはどうすればよいですか?

0 投票する
2 に答える
855 参照

c# - C++\CLI での列挙型の変換に関する問題

.Net によって提供されるいくつかの列挙を使用する、C++\CLI で記述されたアセンブリがあります。次のようなプロパティがあります。

正常に動作しますが、C# コードからこのアセンブリを使用すると、このプロパティの型は

そして私は型キャストをしなければなりません

質問は簡単です。なぜそうなのか、どうすれば修正できるのでしょうか。

0 投票する
4 に答える
4142 参照

.net - C++/CLI ラッパー クラスの例外を変換するためのベスト プラクティス

例外をスローする既存のネイティブ クラスの .NET ラッパー クラスを作成しています。ネイティブ C++ 例外とマネージ例外を変換するためのベスト プラクティスは何ですか? 1 対 1 でキャッチして再スローしますか (例: std::invalid_argument -> System.System.ArgumentException)? すでにどこかにマッピングが作成されていますか?