【问题标题】:Get value from a dynamically loaded DLL从动态加载的 DLL 中获取值
【发布时间】:2015-01-13 16:12:34
【问题描述】:

简单问题:

如何检索位于动态加载的 Dll 中的字符串?

详情:案例:

我有 2 个项目,一个 Dll 和一个“主”表单。 Dll 作为控件加载到主窗体的面板中。

主窗体:

        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Filter = "Plugin Files|*.dll";
            if (DialogResult.OK == ofd.ShowDialog())
            {
                Assembly assembly = Assembly.LoadFile(ofd.FileName);
                Type type = assembly.GetType("FormDLL.Form1");
                Form form = (Form)Activator.CreateInstance(type);
                //form.ShowDialog(); // Or Application.Run(form)

                form.TopLevel = false;
                panel1.Controls.Add(form);
                form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                form.Dock = DockStyle.Fill;
                form.Show();
            }

/

我想做什么

我正在尝试从 Dll 中检索一个字符串.. 像这样

namespace FormDLL
{
    public partial class Form1 : Form
    {
        public string dllTitle = "DllTab1";
            public Form1()
            {
                InitializeComponent();
            }
    }
}

主窗体

button1.text = (load the Dll somehow).dllTitle

注意,我希望用户能够将 Dll 放在一个文件夹中,所以我认为在 VS 中添加 Dll 作为引用不是一个选项,我猜。

【问题讨论】:

  • 使用描述 dllTitle 属性的接口,在你的 dll 中实现它,在宿主中转换和调用。

标签: c# string dll load return


【解决方案1】:

我不确定,但试试这个:

Type myType = form.GetType();
IList<FieldInfo> fields = new List<FieldInfo>(myType.GetFields());

object fValue;
foreach (FieldInfo f in fields)
{
    if(f.Name == "dllTitle")
    {
        fValue = f.GetValue(form);
        break;
     }
}

您也可以使用 LinQ 代替 foreach。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-05-16
    • 1970-01-01
    • 2010-09-30
    • 2012-01-31
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    相关资源
    最近更新 更多