Çalışma sırasında bir derleme yüklemeye çalışıyorum ve etkinliklerine abone oluyorum. Benim senaryoda dll dosyası, iki tamsayı argüman olarak alan ve toplamı içeren özel olay argümanı olan bir olayı yükselten bir ADD yöntemine sahiptir. Ben nasıl meclisi tarafından gündeme olaya abone olmak hiçbir fikrim yok,Yüklü bir derlemenin olayına abone olun
Assembly asm = Assembly.LoadFile(@"C:\Projects\Dll1.Dll");
Type typ = asm.GetType("DLL1.Class1", true, true);
var method = typ.GetMethod("add");
var obj = Activator.CreateInstance(typ);
EventInfo ev1 = typ.GetEvents()[0]; // just to check if I have the proper event
Type tDelegate = ev1.EventHandlerType; // just to check if I have the proper delegate
method.Invoke(obj, new object[] { 1, 0 });
Ama: Burada
Dll dosyasını yüklemek için benim kod parçasıdır. Herhangi bir yardım takdir edilecektir. Eklendi: örnek DLL kaynaknamespace Dll1
{
public class Class1
{
int c = 0;
public void add(int a, int b)
{
c = a + b;
if (Added !=null)
Added(this, new AddArgs(c));
}
public delegate void AddHandler(object sender, AddArgs e);
public event AddHandler Added;
}
public class AddArgs : EventArgs
{
private int intResult;
public AddArgs(int _Value)
{
intResult = _Value;
}
public int Result
{
get { return intResult; }
}
}
}
Teşekkürler, iki soru daha olsa. AddEventHandler sayfasına dayanarak, yüklü derlemede temsilci ile aynı imzanın olması için bir dinamik derleme ve olay işleyicisi oluşturmam gerekiyor. 1) Örnek, ILGenerator tarafından geri dönüş sonucunu nasıl alabileceğini göstermemektedir. 2) İmzayı önceden biliyorsanız, MyEventHandler yöntemini yazmanın daha kolay bir yolu var mı? Yardımcı olursa, örnek Dll için kaynak kodunu soruyu ekledim. – Afshin