M
Martin Maat
Hi,
I am trying to create a plug-in assembly without the need to register it in
the GAC. Reflection should help me out here. I got this far:
private void button1_Click(object sender, System.EventArgs e)
{
Assembly engine = null;
AssemblyName assemblyName = new AssemblyName();
assemblyName.CodeBase = assemblyPath + @"Engine.dll";
engine = Assembly.Load(assemblyName);
Type[] types = engine.GetTypes();
foreach (Type type in types)
{
if ((type.FullName == "Engine.Responder") & (type.IsClass))
{
ConstructorInfo ci = type.GetConstructor(Type.EmptyTypes);
object responder = ci.Invoke(null);
MethodInfo mi = type.GetMethod("ReplyToMessage");
object[] parameters = new object[2];
string msg = "Pipo de Clown";
string reply = null;
parameters[0] = msg;
parameters[1] = reply;
string returnValue = (string)mi.Invoke(responder, parameters);
txtMonitor.AppendText("reply = " + reply);
}
}
}
This is the loaded assembly's method I invoke:
public string ReplyToMessage(string msg, out string reply)
{
reply = "This is my reply.";
return reply;
}
I am doing something right because I do get all the types in the external
assembly and passing either 1 or 3 parameters throws an exception telling me
the number of parameters is wrong. With a parameter array of two strings
passed in it "succeeds" but the external method's code is never visited.
What is wrong?
Martin.
I am trying to create a plug-in assembly without the need to register it in
the GAC. Reflection should help me out here. I got this far:
private void button1_Click(object sender, System.EventArgs e)
{
Assembly engine = null;
AssemblyName assemblyName = new AssemblyName();
assemblyName.CodeBase = assemblyPath + @"Engine.dll";
engine = Assembly.Load(assemblyName);
Type[] types = engine.GetTypes();
foreach (Type type in types)
{
if ((type.FullName == "Engine.Responder") & (type.IsClass))
{
ConstructorInfo ci = type.GetConstructor(Type.EmptyTypes);
object responder = ci.Invoke(null);
MethodInfo mi = type.GetMethod("ReplyToMessage");
object[] parameters = new object[2];
string msg = "Pipo de Clown";
string reply = null;
parameters[0] = msg;
parameters[1] = reply;
string returnValue = (string)mi.Invoke(responder, parameters);
txtMonitor.AppendText("reply = " + reply);
}
}
}
This is the loaded assembly's method I invoke:
public string ReplyToMessage(string msg, out string reply)
{
reply = "This is my reply.";
return reply;
}
I am doing something right because I do get all the types in the external
assembly and passing either 1 or 3 parameters throws an exception telling me
the number of parameters is wrong. With a parameter array of two strings
passed in it "succeeds" but the external method's code is never visited.
What is wrong?
Martin.