从动态加载的DLL中获取值

时间:2014-11-16 19:19:05

标签: c# string dll load return

简单问题:

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

详情:案例:

我有2个项目,一个Dll&一个"主要"形成。 Dll作为控件加载到主窗体的面板中。

的MainForm:

        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();
            }
    }
}

的MainForm

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

请注意,我希望用户能够将Dll删除到文件夹中,所以我认为在VS中添加Dll作为参考不是一种选择,我猜。

1 个答案:

答案 0 :(得分:0)

我不确定,但试试这个:

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。