31

Visual StudioでCOMライブラリを参照しているので、対応する相互運用機能アセンブリが自動的に作成されます。GetType()これらのcomオブジェクトに対してを実行したいのですが、常に。を返しSystem.__ComObjectます。ただし、インターフェイスのクエリは機能します。

bool isOfType = someComeObject is ISomeComObject; //this works

しかし、私が本当に望んでいるのは、comオブジェクトの実際のタイプを返すことです。

Type type = someComeObject.GetType(); //returns System.__ComObject :-(

誰かが私がやりたいことをする方法を知っていますか?

4

4 に答える 4

2

あなたは基本的にそれを理解しました。COMオブジェクトのGetType()は、System .__ ComObjectを提供します。オブジェクトが実際に何であるかを確認するには、それを他の何かにキャストする必要があります。

于 2009-09-15T20:54:52.220 に答える
-2

System.__ComObject数日前、オブジェクトの完全な型名を探していたときに、この質問に出くわしました。Darinのソリューションを使用して型名を取得し、すべてのアセンブリのすべてのクラスをループして一致をテストしました。

    typeName = Microsoft.VisualBasic.Information.TypeName(someCOMObject);
    foreach (System.Reflection.Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
    { 
        foreach (Type type in assembly.GetTypes())
        {
            if ((someCOMObject as type)!=null)
                fullTypeName = type.FullName;
        }
    }

最速かつ最もエレガントなソリューションではありませんが、うまくいきました。

于 2013-09-28T14:33:42.337 に答える