C# 使用反射調用含 ref 或 out 參數的方法

 

    //程序集引用方式
    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);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章