//2023.09.05 C# 无法反射ActiveX对象方法, 在明确方法参数的情况下,可采用dynamic动态调用方式。
bool ret = (bool)((dynamic)obj).MethodA("", "",ref inerr,ref str);
//程序集引用方式
int int111 = 0;
string str111 = "";
bool ret1 = new ClsITestData().GetRtf("Debug_Pas", "022_0714_1654_55", out string rtf, ref int111, ref str111);
string msg1 = rtf;
//COM调用
string str = "";
Type type = Type.GetTypeFromProgID("ProgIDxxxxxx"); //创建COM类型
object obj = Activator.CreateInstance(type); //创建类型实例
object[] invokeParas = new object[] { "Debug_Pas", "022_0714_1654_55", str, null, null }; //参数对象数组
bool ret2 = (bool)type.GetMethod("GetRtf").Invoke(obj, invokeParas); //Invoke执行
string msg2 = invokeParas[2].ToString(); //取参数值
public static object ProgIDInvoke(string progid, string methodName, ref object[] paras) {
Type type = Type.GetTypeFromProgID(progid);
object obj = Activator.CreateInstance(type);
return type.GetMethod(methodName).Invoke(obj, paras);
}
public static void ProgIDInvokeVoid(string progid, string methodName, ref object[] paras) {
Type type = Type.GetTypeFromProgID(progid);
object obj = Activator.CreateInstance(type);
type.GetMethod(methodName).Invoke(obj, paras);
}
public static object ClsIDInvoke(Guid clsid, string methodName, ref object[] paras) {
Type type = Type.GetTypeFromCLSID(clsid);
object obj = Activator.CreateInstance(type);
return type.GetMethod(methodName).Invoke(obj, paras);
}
public static void ClsIDInvokeVoid(Guid clsid, string methodName, ref object[] paras) {
Type type = Type.GetTypeFromCLSID(clsid);
object obj = Activator.CreateInstance(type);
type.GetMethod(methodName).Invoke(obj, paras);
}