如何访问动态加载的方法

本文关键字:动态 加载 方法 访问 何访问 | 更新日期: 2023-09-27 18:01:21

对于我的应用程序,我必须动态加载一个。ocx文件。我可以通过以下代码

来做到这一点
    private void InitializeComponent(string strProgId)
    {
        ResourceManager resources = new ResourceManager(typeof(AxForm));
        Type type = Type.GetTypeFromProgID(strProgId, true);
        m_axCtrl = new AxControl(type.GUID.ToString());
        ((ISupportInitialize)(m_axCtrl)).BeginInit();
        SuspendLayout();
        m_axCtrl.Enabled = true;
        m_axCtrl.Name = "axCtrl";
        m_axCtrl.TabIndex = 0;
        Controls.Add(m_axCtrl);
        Name = "AxForm";
        ((ISupportInitialize)(m_axCtrl)).EndInit();
        Resize += new EventHandler(AxForm_Resize);
        ResumeLayout(false);
        OnResize();
        Show();
    }
但是我的下一个问题是我不知道如何访问动态加载控件的属性和方法。我怎样才能做到这一点?

如何访问动态加载的方法

您应该能够使用'dynamic'伪类型关键字。它永远不会在编译时失败,只有在运行时(所以你必须仔细定义调用,使它们与底层定义相匹配)像这样(我假设你在OCX上有两个方法):

dynamic ocx = m_axCtrl.GetOcx();
ocx.DoThis(arg1, arg2);
ocx.DoThat();

你必须使用Reflection

例如

:假设你有一个名为LoadFile的方法。

:

m_axCtrl.GetOcx().GetType().InvokeMember("LoadFile", BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, m_axCtrl.GetOcx(), new object[1] { path });