問題タブ [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.
interface - Managed C++ のインターフェイス クラス
Managed C++ のインターフェイスは、内部で静的メソッドとメンバーを許可しているため、私には少し奇妙に見えます。たとえば、以下は有効な MC++ インターフェイスです。
さて、私の質問は、インターフェイスでの静的メソッドの使用は何ですか。そして、仮想テーブルなどに何が起こったのか。このインターフェースを実装するクラスの仮想テーブルはどうなるでしょう。頭に浮かぶ質問はたくさんあります。このタイプのクラス、つまりインターフェイス クラスは、ここでは非静的メソッドを定義できないため、単純な抽象クラスと同等ではありません。
インターフェイスで静的を許可することの知恵を知りたいだけです。これは確かに、IMO の OOP 原則に反しています。
managed - マネージ C++ を使用してネイティブ C++ クラスをラップしようとすると、LNK2028 が発生します
マネージド c++ クラスを使用してネイティブ cpp クラスをラップしようとしています。
すべて問題ないように見えますが、何らかの理由でコンパイルできません。
次のリンカー エラーが発生します。
エラー 25 エラー LNK2028: 未解決のトークン (0A0002CE) エラー 27 エラー LNK2019: 未解決の外部シンボル
これを修正するにはどうすればよいですか?:\
さて、これは関数の1つの完全なエラーです:
エラー 20 エラー LNK2028: 未解決のトークン (0A0002CF) "public: bool __thiscall RCSclient::ResumeChannel(char *,int,__int64)" (?ResumeChannel@RCSclient@@$$FQAE_NPADH_J@Z) 関数で参照されている "public: bool __clrcall RCSClientWrapper ::RCSclientWrapper::ResumeChannel(class System::String ^,int,class System::DateTime ^)" (?ResumeChannel@RCSclientWrapper@RCSClientWrapper@@$$FQ$AAM_NP$AAVString@System@@HP$AAVDateTime@4@ @Z) RCSClientWrapper.obj RCSClientWrapper
結果なしでuser32.libを追加しようとしました..
オファー
c++ - 混合モードの Win32 アプリケーションの事後デバッグを支援する
状況は次のとおりです。
バックグラウンド
Visual Studio 2008 で開発された混合モードの .NET/Native アプリケーションがあります。
混合モードとは、ネイティブ C++ ライブラリを呼び出す C++ .NET でフロント エンドが記述されていることを意味します。ネイティブ コードは、必要に応じて新しいスレッドを開始するなど、アプリ内の作業の大部分を行います。.NET コードは、UI のみを目的としています (win フォーム)。
テスターのコンピューターで実行されているアプリケーションのリリース ビルドがあります。
ネイティブ ライブラリは完全に最適化された状態でコンパイルされていますが、デバッグも有効になっています (「デバッグ情報形式」は「プログラム データベース」に設定されています)。
これが意味することは、アプリケーションのデバッグ シンボルが PDB ファイルにあるということです。
問題
とにかく、テスターの 1 人が、XP で時折クラッシュするというアプリの問題を抱えています。ワトソン博士を数回実行して、クラッシュのミニダンプを取得できました。
(ミニダンプを使用して - 実際のアプリを実際にデバッグしているわけではありません) デバッグすると、すべてのデバッグ シンボルが正しく読み込まれます。すべてのネイティブ スレッドの完全なスタック トレースが正しく表示されます。他のスレッド (おそらく .NET スレッド) にはスタック トレースはありませんが、少なくともスレッドが開始された dll (つまり ntdll.dll) をすべて示しています。
失敗したスレッドを正しく報告します (「user(5).dmp の 0x0563d652 で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000000)。
ただし、スレッドに入ると、有用なものは何も表示されません。スタック トレースには、メモリ アドレス "0563d652()" ("ntldll.dll" でさえない) を持つ単一のエントリがあります。
逆アセンブリに入ると、約 30 命令のランダムなセクションが表示されます。メモリ アドレスの両側は、"???" だけです。ソース コードの一部ではないように見えます (バイナリがメモリに順番にロードされていませんか? アセンブリ ステートメントのランダムなセットがどこにもないのは普通のことですか?)。
私の質問
したがって、基本的に私の質問は3倍です。
1) デバッガーの情報不足について説明できる人はいますか?
2)念頭に置いて、コードでエラーが発生したことを示すことはできません。誰かが失敗の理由を提案できますか
3) 将来、この現在の問題を診断するために何か他にできることはありますか?
ヘルプ!
ジョン
アップデート:
これは、WinDBG からの失敗したスレッドのスタック ダンプです。
変でしょ?DLLすら表示されません。
何らかの理由でスタック/ヒープが破損し、スレッドが破損した可能性はありますか?
.net - Windows フォーム コントロール ライブラリ。マネージドおよびアンマネージド
私が書いている Windows フォーム コントロール ライブラリ プロジェクト (C++) は、アンマネージ dll を使用しています。管理されていない dll には、ヘッダー ファイル (チェシャ猫) があります。そして、それをコントロール ライブラリ プロジェクトに含めるだけです。そして、アンマネージ dll の関数を呼び出します (もちろん、適切なマーシャリングを使用して)。これにより、コンパイルおよびビルドが行われます。問題は、マネージ C++ winform アプリケーションであるスキャフォールディングのツール ボックスにコントロールを追加しようとすると、VS2005 が .Net モジュールではないと文句を言うことです。
Windows フォーム コントロールとして MFC dll を使用して変換している人々を見てきました。私は何を間違っていますか?.
.net - C ++/CLIファイナライザーと演算子
次の例では、次のようになります。
演算子->を削除すると、このエラーはなくなります。誰かがこれが起こっている理由を説明できますか?
.net - Managed C++ での配列の初期化
アイテムの 1D マネージ配列を宣言して初期化したいと考えています。
C# コードの場合、次のように記述します。
私はマネージ C++ で同じことを書き込もうとしています (まあ、実際にはプログラム生成を書いています)。
これまでのところ、私は持っています:
これには 2 つの問題があります。
- もっと冗長です
- 配列のサイズを前もって宣言する必要があるため、コード ジェネレーターにとって不便です。
Managed C++ に GC 配列の「配列初期化」構文はありますか? 正しい構文は何ですか? この質問や他の同様の質問への適切な Web リンクはありますか?
.net - Managed C ++での配列初期化のバグ(フォローアップ)
私の前の質問からのフォローアップ。
次のコードがエラーなしでコンパイルされる理由を誰かが説明できますか?
しかし、これにより、「エラーC2440:'初期化中':'VdbParameterInfo^'から'VdbMethodInfo^'に変換できません」というメッセージが表示されます。
私が行ったのは、メソッド配列の初期化内にパラメーター配列を「ネスト」しようとすることだけです...直接気にしないでください-VdbMethodInfoのコンストラクターは、2番目の引数としてParameterArrayを取ります。
マネージC++配列の初期化では、再帰的なネストが同じタイプであることが想定されているようです...(つまり、これはバグであるに違いないと思います)
関連する質問:ここ