捕获由反射的 dll 引发的事件
trap an event raised by a reflected dll
我有一个桌面 C# 应用程序。
我动态加载一个 DLL。
我参加了一个活动。
我现在想在我的应用程序中捕获事件。
所以,这是我反映的 DLL:
namespace injectdll
{
public class Class1
{
public delegate void delResponseEvent(string message);
public static event delResponseEvent ResponseEvent;
public static void hello()
{
if (ResponseEvent != null)
{
ResponseEvent("hello andy");
}
}
}
}
这是我的桌面应用程序的一部分:
private void button1_Click(object sender, EventArgs e)
{
try
{
byte[] bytes = System.IO.File.ReadAllBytes(@"C:\Users\Andrew\Desktop\testbytes\injectdll\injectdll\bin\Debug\injectdll.dll");
Assembly program = Assembly.Load(bytes);
Type type = program.GetType("injectdll.Class1");
var flags = BindingFlags.Static | BindingFlags.Public;
MethodInfo Method = type.GetMethod("hello", flags);
var eventInfo = type.GetEvent("ResponseEvent", flags);
type.InvokeMember("hello", System.Reflection.BindingFlags.InvokeMethod, System.Type.DefaultBinder, "", null);
}
catch (Exception ex)
{
}
}
我现在需要这样的东西:
private void FunctionInMyDEsktopApp(string message)
{
//this has been raised in my DLL
}
这样的事情怎么样:
...
var eventInfo = type.GetEvent( "ResponseEvent", flags );
var d = Delegate.CreateDelegate( eventInfo.EventHandlerType, this,
"FunctionInMyDEsktopApp" )
eventInfo.AddEventHandler( null, d );
...
由于您也没有委托的类型,因此您可以使用 EventInfo.EventHandlerType
获取它。有关 AddEventHandler
here.
的更多信息
我有一个桌面 C# 应用程序。
我动态加载一个 DLL。
我参加了一个活动。
我现在想在我的应用程序中捕获事件。
所以,这是我反映的 DLL:
namespace injectdll
{
public class Class1
{
public delegate void delResponseEvent(string message);
public static event delResponseEvent ResponseEvent;
public static void hello()
{
if (ResponseEvent != null)
{
ResponseEvent("hello andy");
}
}
}
}
这是我的桌面应用程序的一部分:
private void button1_Click(object sender, EventArgs e)
{
try
{
byte[] bytes = System.IO.File.ReadAllBytes(@"C:\Users\Andrew\Desktop\testbytes\injectdll\injectdll\bin\Debug\injectdll.dll");
Assembly program = Assembly.Load(bytes);
Type type = program.GetType("injectdll.Class1");
var flags = BindingFlags.Static | BindingFlags.Public;
MethodInfo Method = type.GetMethod("hello", flags);
var eventInfo = type.GetEvent("ResponseEvent", flags);
type.InvokeMember("hello", System.Reflection.BindingFlags.InvokeMethod, System.Type.DefaultBinder, "", null);
}
catch (Exception ex)
{
}
}
我现在需要这样的东西:
private void FunctionInMyDEsktopApp(string message)
{
//this has been raised in my DLL
}
这样的事情怎么样:
...
var eventInfo = type.GetEvent( "ResponseEvent", flags );
var d = Delegate.CreateDelegate( eventInfo.EventHandlerType, this,
"FunctionInMyDEsktopApp" )
eventInfo.AddEventHandler( null, d );
...
由于您也没有委托的类型,因此您可以使用 EventInfo.EventHandlerType
获取它。有关 AddEventHandler
here.