Type.InvokeMember - DISP_E_MEMBERNOTFOUND

时间:2018-03-27 19:55:14

标签: c# types com-interop

Type.InvokeMember失败,错误无法找到成员DISP_E_MEMBERNOTFOUND,尽管该成员肯定在那里。

VB脚本编写者熟悉的Microsoft Scripting Runtime有一个Dictionary类,但我无法运行简单的后期绑定调用。这是MCRE。我还没有开始编组返回参数。

    static void Main(string[] args)
    {
        Type type = Type.GetTypeFromProgID("Scripting.Dictionary");
        Object com_obj = Activator.CreateInstance(type);

        Object[] countArgs = new Object[1];
        string msg;
        BindingFlags invokeAttr = BindingFlags.InvokeMethod;
        try
        {

            type.InvokeMember("Count", invokeAttr, null, com_obj, null);
        }

        catch (Exception ex)
        {
            msg = ex.Message + ":" + ex.InnerException.Message;
            Debug.WriteLine(msg);
        }


        Console.ReadKey();
    }

1 个答案:

答案 0 :(得分:1)

尝试使用BindingFlags invokeAttr = BindingFlags.GetProperty;代替。 另外,你可以使用C#的动态将不可读的代码减少到最低限度。

Type type = Type.GetTypeFromProgID("Scripting.Dictionary");
dynamic com_obj = Activator.CreateInstance(type);
var count = com_obj.Count;