C++ プロジェクトで dll のクラスを使用しています。までは、すべて正常に動作しています...
特定のメソッド (オブジェクト ブラウザーにリストされている) を呼び出そうとすると、このメソッドが名前空間のメンバーではないというエラーが表示されます。
調べてみると、このメソッドは「virtual void x() シール済み」としてリストされていることに気付きました。
そのような関数を呼び出す方法はありますか?
C++ プロジェクトで dll のクラスを使用しています。までは、すべて正常に動作しています...
特定のメソッド (オブジェクト ブラウザーにリストされている) を呼び出そうとすると、このメソッドが名前空間のメンバーではないというエラーが表示されます。
調べてみると、このメソッドは「virtual void x() シール済み」としてリストされていることに気付きました。
そのような関数を呼び出す方法はありますか?
今後の参考のために、エンタープライズライブラリサポートチームから回答を受け取りました。彼らは以下へのリンクを投稿しました:
マネージC++とIDisposable新しいマネージC++/ CLI構文を使用してコードを記述していますが、次のエラーが発生しました。
エラーC2039:'Dispose':は'System::IDisposable'のメンバーではありません
私が始めたコードはこれでした:
image->Dispose(); // image implements IDisposable
同じコンパイラエラーが発生したので、クラス/名前空間エラーを排除したかったので、次のように書き直しました。
((IDisposable ^)image)->Dispose();
上記のエラーが発生しました。うわぁ!
修正方法は次のとおりです。
削除を使用します。Managed C ++は、ファイナライザー内にDispose()を非表示にするようになりました。オブジェクトを削除するだけで、残りは処理されます。気紛れ。
これは本当にうまくいきます!!!!
一般的な C++ ではなく、.NET に固有の C++ CLI キーワード (マネージ C++) で封印されています。
sealed
関数の on は、派生型でそのメソッドをオーバーライドできないことを意味します。
sealed
関数を呼び出せないという意味ではありません。関数は private
.
仮想で封印されていること自体が関数の呼び出しを妨げる理由がわかりません。MSDNによると、 sealキーワードは特に仮想メソッドを対象としています。
問題の機能と、それをどのように使用しようとしているのかについて、他に提供できる情報はありますか?