Whenever my supporting COM dll's is called through reflection technique in C#, It gives me "Exception has been thrown by the target of an invocation." My Code: public class ExecuteAssembly { IAssembly objIAssembly = new Xml_Operations.XmlRetrive(); public void StartExecution() { try { Type classType = LoadDll(); // create instance of class Calculator //object classInstance = Activator.CreateInstance(classType); dynamic classInstance = (dynamic) Activator.CreateInstance(classType) <-- ERROR GETS FIRED classInstance.Visible = true; // get info about method: public MethodInfo methodCall = classType.GetMethod(objIAssembly.MethodName); ParameterInfo[] parameters = methodCall.GetParameters(); objIAssembly.MethodOutput = methodCall.Invoke(classInstance, objIAssembly.ParametersArray); Xml_Operations.XmlStore.OutputToXmlFile(objIAssembly); } catch (Exception ex) { Console.WriteLine(ex.Message); } } private Type LoadDll() { string[] dirSplit=objIAssembly.DllPath.Split('\\'); string dllName = dirSplit[dirSplit.Length - 1].Substring(0, dirSplit[dirSplit.Length - 1].Length - 4); ; int count = dirSplit[dirSplit.Length - 1].Count(); string dirPath = objIAssembly.DllPath.Substring(0, (objIAssembly.DllPath.Length - count)); var files = Directory.GetFiles(dirPath ,"*.dll"); Type[] types; Type classType = null; foreach (var file in files) { try { types = Assembly.LoadFrom(file).GetTypes(); if (types[0].AssemblyQualifiedName.Contains(dllName)) classType = types[0]; } catch { continue; // Can't load as .NET assembly, so ignore } } return classType; } }
classType = types[0]; break;
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)