Multimobile Development: Building Applications for any Smartphone
Dynamically load an assembly and invoke a method
Messages   Related Types
This message was discovered on microsoft.public.dotnet.languages.csharp.
Responses highlighted in red are from those people who are likely to be able to contribute good, authoratitive information to this discussion. They include Microsoft employees, MVP's and others who IMHO contribute well to these kinds of discussions.

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.

Reply to this message...
Vote that this is a GOOD answer...
 
Really good experience at the Apple Store
MonoDroid – looking *awesome*
 
    
Philip Rieck
What happens when you use this instead:
string returnValue = (string)mi.Invoke(responder, BindingFlags.InvokeMethod,
null, parameters);

?

"Martin Maat" <Click here to reveal e-mail address> wrote in message
news:Click here to reveal e-mail address...
[Original message clipped]

Reply to this message...
Vote that this is a GOOD answer...
 
First volume of Multimobile Development nearly ready to go to press
A mention on Developing for the iPhone and Android: The pros and cons
 
    
Eric Gunnerson [MS] (VIP)
Martin,

I think you should be using Activator.CreateInstance() rather than invoking
to the constructor.

--
Eric Gunnerson

Visit the C# product team at http://www.csharp.net
Eric's blog is at http://weblogs.asp.net/ericgu/

This posting is provided "AS IS" with no warranties, and confers no rights.
"Philip Rieck" <Click here to reveal e-mail address> wrote in message
news:ulYq%Click here to reveal e-mail address...
[Original message clipped]

Reply to this message...
Vote that this is a GOOD answer...
 
 
 
System.Activator
System.EventArgs
System.Reflection.Assembly
System.Reflection.AssemblyName
System.Reflection.BindingFlags
System.Reflection.ConstructorInfo
System.Reflection.MethodInfo
System.Type




Ad
BootFX
Reliable and powerful .NET application framework.
iOS, Android and Windows Phone Development Training and Consultancy
Hosted by RackSRV Communications
 
Multimobile Development: Building Applications for any Smartphone
Copyright © AMX Software Ltd 2008-2010. Portions copyright © Matthew Baxter-Reynolds 2001-2010. All rights reserved.
Contact Us - Terms of Use - Privacy Policy - 4.0.30129.1734