1

適切な 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 インターフェイスのみを使用します。(最初の試行のように前後に渡すのではなく)。

4

0 に答える 0