Try this, I have tested and it works.
using dynamic to try an prevent need for Assembly references & Type casting.
public object CallWS(string Xml, string ClassName, string Mode) {
try {
Assembly a;
if ((a = Assembly.LoadFile(@"D:\DLL\live hrp\WNHRP01BO.dll")) != null) {
var aTypes = a.ExportedTypes.ToArray();
Type t;
string BOClass = ClassName.Split(',')[0].ToString();
if ((t = aTypes.FirstOrDefault(tp => tp.FullName == BOClass)) != null) {
object obj = Activator.CreateInstance(t);
object igd = (dynamic)obj.GetType().GetInterface("IGetData");
object value;
//option 1:------------------------------------>>
value = ((dynamic)igd).InvokeMember(
"GetData",
BindingFlags.InvokeMethod |
BindingFlags.Instance |
BindingFlags.Public,
null,
obj,
new object[] { Xml, ClassName, Mode }
);
//option 2:------------------------------------>>
MethodInfo mi = ((dynamic)igd).GetMethod("GetData");
value = mi.Invoke(obj, new object[] { Xml, ClassName, Mode });
return value;
}
}
return null;
}
catch { return null; }
}