Topaz Filer: if you use e-mail for business, we can save you money and decrease your risk.
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...
 
Auto-following on Twitter
Ubuntu and XP on one “desktop”
 
    
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...
 
Outlook interop - stopping user properties appearing on Outlook message print
Seriously, why is “cut and paste” majorly newsworthy???
 
    
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.
Recession Busting Bespoke Software
Get through the recession by investing in bespoke software to decrease costs and create commercial opportunities.
Other DN247 Network Sites
.NET 247
SQL Server Wins
Old Skool Developer
 
Copyright © AMX Software Ltd 2008-2009. Portions copyright © Matthew Baxter-Reynolds 2001-2009. All rights reserved.
Contact Us - Terms of Use - Privacy Policy - .NET 247 is a member of the DN247 Network - 4.0.30129.1734