2011-12-23 4 views
2

C#でCOMアクションを実装する必要があります。 COMオブジェクトはEvidianのSSOエンジンです。前のInvokeMemberの結果でInvokeMemberを呼び出す方法は?

私はVB.NETのサンプルを持っています。私はC#に翻訳する必要があります。

はVB.NETで、私はそのコードと仕事をすることができます。

Dim oSSO, oApp 
oSSO = CreateObject("SSOEngine.SSOEngine") 
oApp = oSSO.GetApplication2("myApp", "MyPassword", 0) 
return oApp.LoginId(0) 

C#では、私は、私がoApp.LoginIdにブロックされています

System.Type objTypeSSOEngine = Type.GetTypeFromProgID("SSOEngine.SSOEngine"); 
object instSSOEngine = Activator.CreateInstance(objTypeSSOEngine); 
object o = objTypeSSOEngine.InvokeMember("GetApplication2", 
      System.Reflection.BindingFlags.InvokeMethod, null, 
      instSSOEngine, new object[] { "myApp", "MyPassword", 0 }); 

次のコード(0 )行... oオブジェクトで別のInvokeMemberを実行する方法は分かりますか?あなたは、あなたがCOM参照を追加することができない場合の場合は、.NET 4

System.Type objTypeSSOEngine = Type.GetTypeFromProgID("SSOEngine.SSOEngine"); 
dynamic instSSOEngine = Activator.CreateInstance(objTypeSSOEngine); 
dynamic oApp = objTypeSSOEngine.GetApplication2("myApp", "MyPassword", 0); 
return oApp.LoginId(0); 

を使用している場合の

+0

.net 4を使用していますか? –

+0

こんにちは、いいえ、.NET 2.0を使用します。 – Sylvain

答えて

1

あなたはケースにdynamicsを使用することができます(参照を追加します - > [Visual StudioでCOM)とVisual Studioますこのことができますあなたが

希望に適したクラスとインタフェースを持つ管理中級DLLを生成

1

.NET 2.0 - > 3.5

GetApplication2呼び出しからオブジェクト・リターンのtypeのあなたが気づいた場合は、単に既知の型にキャストし、必要な関数を呼び出します。

object o = objTypeSSOEngine.InvokeMember("GetApplication2", 
      System.Reflection.BindingFlags.InvokeMethod, null, 
      instSSOEngine, new object[] { "myApp", "MyPassword", 0 }); 

KnownType tp = o as KnownType; 
if(tp!=null) 
    tp .LoginId(0) 

.NET 4.0

使用dynamic

擬似コード

System.Type objTypeSSOEngine = Type.GetTypeFromProgID("SSOEngine.SSOEngine"); 
dynamic instSSOEngine = Activator.CreateInstance(objTypeSSOEngine); 
dynamic oApp = instSSOEngine.GetApplication2("myApp", "MyPassword", 0) 
return oApp.LoginId(0) 

このような何か...

ホーこれは役に立ちます。

+0

こんにちは、ありがとうございました! 私は.NET 4.0ではないですので、私は、ダイナミックを使用することはできません...(私はその「バリアント」タイプについては知らなかった...それは素晴らしいことだ!)... も、私が使用することはできません.NET 4.0 ... 私は戻り値のオブジェクトの型がSSOApplicationですが、私は、私が思うにそれを参照するためのC++ DLLへの参照を作成する必要があることを知っています... – Sylvain

1

私はダイナミックタイプを使用することをお勧めします。 (MSDN)

あなたはこのタイプに任意のオブジェクトをキャストすることができますし、リフレクションを使用する必要はありません。

関連する問題