問題タブ [managed-c++]
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.
.net - 子クラスを親としてインスタンス化するが、子のメソッドを呼び出す
データを処理するためのエンジンの開発が必要なアプリケーションを作成していますが、エンジンは顧客のニーズに応じて別のものに置き換える必要がありました。顧客ごとに非常に異なるニーズがあったため、各エンジンを他のエンジンから分離して、顧客が必要とするエンジンでのみアプリケーションを提供できるようにしたいと考えました。
したがって、私の VS ソリューションには次のプロジェクトがあります: App、Engine_Base、Engine_A、Engine_B App = exe Engine_Base = 親クラス... dll にコンパイルされ、projec プロパティを通じて App の参照に追加されます Engine_A と Engine_B は両方ともEngine_Base の子クラスであり、両方とも独自の dll (Engine_A.dll、Engine_B.dll) にコンパイルされます。すべての顧客に両方を出荷したくないため、実行時に読み込まれないように、これらはアプリの参照には追加されません。
お客様の構成ファイルに基づいて、ロードするエンジンを決定します。
C++ プロジェクトの参照には Engine_Base のみが追加されるため、Engine__A または Engine_B オブジェクトを親型にキャストします。
次に、実行に時間がかかる (大量のデータを処理する) エンジンのスレッド実行のイベントを設定します。
しかし、これは私に次のことを与えます:
これは継承に関係していることはわかっていますが、これを修正する方法についてのアイデアが不足しています。
誰もこれを修正する方法についてアイデアを持っていますか?
私たちのアプローチは適切な解決策でしょうか?それとも何か別のものを見て別の方法で行うべきだったのでしょうか?
managed-c++ - マネージ C++ 未解決トークン
マネージ C++ は初めてです。
1 つの .sln に、Project Lib と Project LibTest という 2 つのマネージ C++ プロジェクトがあります。LibTest は Lib を利用します。
Lib は正常にコンパイルおよびリンクされます。プロジェクトは .dll として設定されます。
LibTest も .dll としてコンパイルされますが、リンクすると、すべての Lib::methods で「未解決のトークン」が発生します。これらのメソッド定義は、Lib .cpp ファイルで定義されています。
定義を Lib.h ファイルに移動すると、すべてが機能します。
LibTest の Reference を Lib プロジェクトに依存するように変更しました。
私は何が欠けていますか?
編集:さて、これは私が持っているものとまったく同じですが、まだ機能しません。
まず、Visual Studio 2008 SP1 を使用しています。
次に、C# で同様の演習を行ったところ、問題なく動作しました。
空の C++ CLR プロジェクトを作成しました。Lib プロジェクトを追加しました。マネージド クラスを追加しました。VSTD によって生成された Lib.h と Lib.cpp。コンストラクタは自動生成されます。
次に、ソリューションに別のプロジェクトを追加しました。私はこれを LibTest と呼びました。LibTest という別のマネージ クラスを追加しました。LibTest.h と LibTest.cpp が生成されます。LibTest コンストラクターで Lib をインスタンス化しようとしましたが、リンク中に単純に次のように述べました。
1>LibTest.obj: エラー LNK2020: 未解決のトークン (06000002) Lib::.ctor
正確なコードは次のとおりです。
Lib プロジェクト (.dll プロジェクトとしてコンパイル)
LibTest プロジェクト (application.exe としてコンパイル)
string - System::String^ から std::string への C++/CLI 変換
誰かが変換する簡単なコードを投稿してもらえますか?
に、
C++std::string
つまり、次の値を割り当てたいだけです。
に、
c# - CLR/Managed C++ でバリアント型を実装するにはどうすればよいですか?
.net CLR オブジェクトはすべてのクラス オブジェクトのベースですが、基本型 (int、float など) ではありません。Object のような基本型を使用するにはどうすればよいですか? すなわちBoost.Variant のような?
例: -
c++ - Managed C++ の文字列の配列
Managed C++ でアプリケーションを作成しようとしていますが、文字列の配列を宣言する方法がわかりません。
文字列^ linet[];
エラーをスローします
'System::String ^': ネイティブ配列にこのマネージド型を含めることはできません
したがって、管理されたデータ型に対してこれを行う別の方法があると思います。正確には何ですか?
c# - C ++がC#オプションを呼び出す
ネイティブのWin32C++コードと、C ++コードから呼び出したいC#アセンブリのセットがあります。私は私たちのオプティオスを次のように要約します:
COMを使用します。C#コードは、追加の属性(GUID、COMVisible)で装飾する必要があります。C#アセンブリはregasmに登録する必要があり、COMを介してネイティブC++コードで使用できるようになります。
C ++ / CLI(以前はマネージC ++)ラッパークラスを使用します。C++クラスをネイティブC++プロジェクトに追加できます。そのクラスは/clrでコンパイルされます。ネイティブC++コードはC++/ CLIクラスを呼び出し、C ++/CLIクラスは.Netコードを呼び出します。COMは関与しません。CLRは、C ++ / CLI拡張機能によって処理されるマーシャリングで、必要に応じて魔法によって開始されます。
ネイティブC++コードでCLRのインスタンスをホストします。
ラッパークラスの必要性がなくなることを除いて、オプション2に勝る利点が見当たらないため、オプション3を割引します。だから問題は、オプション1とオプション2の長所/短所は何ですか?
前もって感謝します。
memory - リリース モードでの AccessViolationException (C++)
Visual C++ からリリース モードでアプリケーションを実行すると、次の例外が発生します。
未処理の例外: System.AccessViolationException: 保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています。_cexit() で .LanguageSupport._UninitializeDefaultDomain(Void * cookie) で .LanguageSupport.UninitializeDefaultDomain() で .LanguageSupport.DomainUnload(オブジェクト ソース、Eve ntArgs 引数) で .ModuleUninitializer.SingletonDomainUnload(オブジェクト ソース、EventArgs 引数) で
これは、デバッグ モードでは発生しません。最初は、自宅のコンピューターでこの例外が発生しましたが、職場のコンピューターでは発生しませんでした。仕事用のコンピューターで開発を続けていたときに、ぶつかってしまいました。
また、3 つの const std::string 変数を追加すると、例外がスローされることがわかりました。私が削除した場合、すべてがうまくいきました。
別の情報: リリース モードでコンパイラの最適化をすべてオフにすると、例外がなくなることがわかりました。
何か怪しいことが起こっている。これを追跡する方法についてのアイデアはありますか?
助けてくれてありがとう、ジョー