2017-04-22 1 views
0

私は物事のようないくつかのゲームエンジンを作りたいと思います。このスクリプトエンジンにC#コードを使用したいと思います。動的にロードされているC#コードは、ホストアプリケーションのオブジェクトを使用できますか?

私は、Roslynを使ってC#コードを動的にコンパイル/ロードできると聞きましたが、コードがホストのオブジェクトを参照できるかどうかが分かりました。

私を説明しましょう。ホストアプリケーションは、これらのメソッドを持っており、外部のコードをロードします。

using Microsoft.CodeAnalysis; 
using Microsoft.CodeAnalysis.CSharp; 
using Microsoft.CodeAnalysis.CSharp.Syntax; 
(...) 
static class MainApp 
{ 
    static void Main() 
    { 
     // TODO : Load codes via Roslyn   
    } 

    static void DoSomething() 
    { 
     // Do something 
    } 
} 

とロードされたコードは、これらの行動があります

(same namespace as host application) 
... 
MainApp.DoSomething(); // Is it possible? 
... 
+1

プラグインでは、メインアプリケーションが呼び出すInvoke(ICallbackコールバック)を実装できます.ICallbackは、メインアプリケーションとプラグインの両方が参照する別の/共有アセンブリで宣言されています。次に、あなたのプラグインは、コールバックインターフェイスを使ってメインアプリでメソッドを呼び出すことができます。 – EventHorizon

答えて

2

はい、それは可能です。動的にロードされたコードがホストアプリケーションアセンブリへの参照を使用してコンパイルされた場合、アプリケーションが通常のライブラリであるかのように、アプリケーションのタイプとメンバをpublicのように使用できます。

関連する問題