適切な COM インターフェイスと対話する C# で記述したプログラムがあります。残念ながら、このインターフェイスには C# では正しく動作しない機能があります。ただし、インターフェイスは Visual Basic から正常に動作します。
私はすでに C# から動作するインターフェイスの部分に C# で多くのコードを書いているので、回避できるのであれば VB ですべてを書き直したくありません。既に持っているすべてのコードを書き直すことなく、必要な機能のために Visual Basic を使用する簡単な方法を見つけたいと考えています。それで、問題は、これを行うための最良の方法は何ですか?
私の最初の試み:
C# で作成した COM オブジェクトを Visual Basic に渡すだけで動作することを期待していました。そのようです:
C#:
Type type = Type.GetTypeFromProgID("ACM Application");
acm = System.Activator.CreateInstance(type);
ACMAccess.ACMAccess acmAccess =new ACMAccess.ACMAccess(acm);
VB:
Sub New(ByVal acm)
Dim starVars = acm.Simulation.Flowsheet.FindMatchingVariables("~")
For Each Var In starVars
Console.WriteLine(Var.Name)
Next
End Sub
残念ながら、これは機能しません。失敗は興味深いものです。デバッガーでは正しい型を持っていますが、メソッドを呼び出しても何もしません。存在しないメソッド名を試すと例外が発生しますが、既存のメソッドでは何も起こりません。
2番目のアイデア:
私が考えることができる代替案は、私がしばらく避けてきたものですが、委任パターンです。COM インターフェイスとのすべての対話を実際に作成および実行する VB オブジェクトを作成します。C# プログラムの残りの部分は、VB ラッパーを介して COM インターフェイスのみを使用します。(最初の試行のように前後に渡すのではなく)。