0

DLL が添付されているプログラムの関数にアクセスしたいと考えています。

私が試したDLLで:

Assembly assembly = Assembly.GetExecutingAssembly();
Type type = assembly.GetType("Uranium");
MethodInfo methodInfo = type.GetMethod("Util");

methodInfo.Invoke("SendClient", new object[] { Packet.GetData()});

しかし、動作しません。null 例外が発生しますが、行は言いません。実行中のプログラムが呼び出され、名前空間は「Uranium」、クラスは「Util」、関数は「SendClient」です。

4

3 に答える 3

0

最初に、型を含むアセンブリを見つける必要があります。GetType()また、名前空間ではなくクラス名を、クラス名ではなくメソッド名を に渡す必要がありますGetMethod()

foreach (Assembly currentassembly in AppDomain.CurrentDomain.GetAssemblies()) 
{
    Type t = currentassembly.GetType("Util", false, true);
    if (t != null) 
    {
        MethodInfo methodInfo = type.GetMethod("SendClient");
        methodInfo.Invoke(Activator.CreateInstance(t),new object[] { Packet.GetData()});
    }
}
于 2013-08-28T09:01:25.783 に答える
0

あなたが投稿したコードから私が読むことができるものから、クラス Uranium の関数 Util を呼び出そうとします。そして、クラスのインスタンスとして文字列を渡しています。

これは、あなたがやろうとしていることにもっと似ているはずです:

Assembly assembly = Assembly.GetExecutingAssembly();
Type type = assembly.GetType("Util");
MethodInfo methodInfo = type.GetMethod("SendClient");

methodInfo.Invoke(Activator.CreateInstance(type), new object[] { Packet.GetData()});

SendClientが静的メンバー関数の場合、Activator.CreateInstance(type)に置き換えることができますnull。そしてもちろん、GetTypeとのGetMethod戻り値が異なることを確認する必要があります。null

于 2013-08-28T09:02:53.970 に答える