0

2 つのスタンドアロン アプリケーションがあります。

    Namespace FirstApplication
        Class MainWindow
            Public Sub New()
                InitializeComponent()
            End Sub

            Public Function RunBatch(Parameter as String) as Double
                'Do some work
                Return SomeValue
            End Function

        End Class
    End Namespace

2 番目のアプリケーション:

    Namespace SecondApplication
        Class MainWindow
            Public Sub New()
                InitializeComponent()
            End Sub

            Public Sub RunBatch()
                'Call RunBatch() from first Application, get show the result
                Msgbox(RunBatch)
            End Function

        End Class
    End Namespace

どちらも WPF、.Net 4.0 ベースです。目標は、最初のアプリケーションで 2 番目のアプリケーションを呼び出し、そこで関数を実行することです。

重要な部分は、両方のアプリケーションが主に独立して使用され、最初のアプリケーションで 2 番目の呼び出しが発生する場合があることです。両方のアプリケーションが実行可能ファイルとして存在する必要があるため、最初のアプリケーションの dll を作成して問題を解決したくありません。実行可能ファイルと dll の両方の更新を最新の状態に維持する必要があり、それらが同期しなくなった場合に悲惨な結果を招く可能性があります。 .

したがって、問題は、2 番目のアプリケーションの AppDomain 内に最初のアプリケーションのインスタンスを作成し、決定的にそのインスタンスの関数を実行することが可能かどうかです。

4

2 に答える 2

0

どうやら、これはリフレクションを介して行うことができます。プロセスは簡単ですが、dll を使用するほど便利ではありません。

Public Class CalltoExternallApp
'this is the declaration of the external application you want to run within your application
Dim newAssembly As System.Reflection.Assembly = System.Reflection.Assembly.LoadFrom("Mydirectory\Myfile.exe")
Public Sub Main()
            'Loads the main entry point of the application i.e. calls default constructor and assigns handle for it to MyApplication
            Dim MyApplication = newAssembly.CreateInstance("MyApplication.RootClass")
            'Get the type which will allow for calls to methods within application
            Dim MyApplicationType as Type = newAssembly.GetType("MyApplication.RootClass")
            'If calling a function, the call will return value as normal. 
            Dim Result As Object = LunaMain.InvokeMember("MyFunction", Reflection.BindingFlags.InvokeMethod, Nothing, MyApplication, MyParameters)
End Sub
End Class

リフレクション経由で作成されたインスタンスにイベント ハンドラーを追加する方法については、こちらも確認してください: http://msdn.microsoft.com/en-us/library/ms228976.aspx

于 2013-08-22T15:59:22.807 に答える