2016-07-02 23 views
0

私のプロジェクトには2つのDLLがあり、1つはAndroid固有で、もう1つはプラットフォームに依存しません。独立したDLLはAndroidアセンブリを読み込み、GetTypesメソッドを呼び出しますが、すべてのpublicクラスを返すわけではありません。 Android DLLには3つのクラスがあり、2つは静的メソッドでのみ静的です。インスタンス化できるのは1つだけです。静的クラスは返されません。ロードされたアセンブリにタイプが見つかりません

のClass1.cs(VSにDLLにコンパイル):

using System; 
using System.Reflection; 

namespace ClassLibrary1 
{ 
    public class Class1 
    { 
     public void test() 
     { 
      Assembly asm = Assembly.Load("ClassLibrary2"); 
      Type T = asm.GetType("ClassLibrary2.Class2"); 

      T.InvokeMember("Method", BindingFlags.Static | BindingFlags.InvokeMethod, null, T, null); 
     } 
    } 
} 

Class2.cs(VSで別のDLLにコンパイル):

namespace ClassLibrary2 
{ 
    public static class Class2 
    { 
     public static void Method() 
     { 
      return; 
     } 
    } 
} 

UnityClass.cs (Unity 5.xで空のGameObjectに割り当てます):

using UnityEngine; 
using System; 

class UnityClass : MonoBehaviour 
{ 
    public void Start() 
    { 
     var x = new ClassLibrary1.Class1(); 
     x.test(); 
    } 
} 
+2

[最小限の、完全で、検証可能な例](http://stackoverflow.com/help/mcve)を提供できますか? – thehennyy

+0

https://gist.github.com/anonymous/7dce68c86ee65281033106705444f147 – Mud

+0

質問にあなたのコードを含めることができますか?将来、リンクが死んでしまう可能性があります。 – thehennyy

答えて

0

BindingFlagsに関するMSDNの以下のノートを見てください:

あなたは公開またはとともに非公開インスタンスまたは静的を指定しなければならないか、何のメンバーは返されません。

電話にBindingFlags.Publicを追加すると、そのメンバーを取得する必要があります。

また、第4パラメータターゲットは、静的メンバーを呼び出すときには必要ありません。ターゲットとして渡す必要はなく、nullを使用します。

最後に、個人的な経験から、InvokeMemberの代わりに、Type.GetMethodType.GetField、...を使用して、最初に目的のメンバーを取得することをおすすめします。これにより、戻り値をチェックして、検索しているメンバーが見つかったことを確認することができます。これは、デバッグと、実行時に意味のある例外をスローするために優れています。

+0

その部分のフィードバックをありがとうが、実際にはget型呼び出しで例外が発生します。 – Mud

関連する問題