VisualStudioのデバッガーでCOM / Interopオブジェクトを適切に(正しいタイプで)表示できるかどうか、またその方法を知っている人はいますか? 私が得るのは、「悪」のSystem.__ComObject値だけです (タイプを正しく識別しているにもかかわらず)?
例えば:
VisualStudioのデバッガーでCOM / Interopオブジェクトを適切に(正しいタイプで)表示できるかどうか、またその方法を知っている人はいますか? 私が得るのは、「悪」のSystem.__ComObject値だけです (タイプを正しく識別しているにもかかわらず)?
例えば:
.NET および COMから: 完全な相互運用性ガイド:
メソッドの戻り値の型または参照渡しパラメーターを介して COM オブジェクトのインスタンスが返され、CLR が型を判別できない場合、COM オブジェクトは常に渡されるため、汎用の System.__ComObject 型が取得されます。 /インターフェイス ポインターとして返されます。
Marshal.CreateWrapperOfType
以下の例のように、戻り値の型を変更してみてください。
MyType newObject = (MyType)Marshal.CreateWrapperOfType(oldObject, typeof(MyType))
次に、ウォッチ ウィンドウで newObject を確認すると、期待どおりのプロパティが含まれているはずです。
呼び出しが失敗すると、InvalidCastException がスローされます。
私はイミディエイト ウィンドウを使用して、COM オブジェクトのプロパティを手動でクエリしました。欠点は、あなたがインテリセンスを得るとは思わないので、何を検査したいのかを正確に知る必要があることです。
したがって、これは答えではありませんが、これら 2 つのスクリーン ショットを確認してください。これは同じアプリケーションからのものですが、2 つの異なるブレーク ポイントにあります。どちらの場合も、COM オブジェクトは同じ COM/AX ライブラリからのものです。あるケースでは「System.__ComObject」が表示され、別のケースでは適切なタイプが表示される理由がわかりません。ただし、どちらの場合も、適切なオブジェクト/インターフェイス プロパティが表示されます。何を与える?違いはなぜですか?
ここの最初のものは、「System.__ComObject」を表示していることを示していますが、オブジェクトのすべてのプロパティも表示しています。クリックするとフルサイズの画像が表示されます。
2 つ目は、「System.__ComObject」を完全に非表示にします。クリックするとフルサイズの画像が表示されます。