在c#中的Winform应用程序中使用dll

时间:2012-03-31 18:15:15

标签: c# .net winforms dll

我想知道如何在Windows应用程序表单中使用dll?

我想创建一种PhotoViewer,我必须在dll和GUI中分离应用程序的核心。所以在我的gui中,如果我点击一个给定的按钮,我将调用dll中的相应功能。

例如:

在dll中允许加载图片的函数:

private void btn_browse_Click(object sender, System.EventArgs e)
{
    try
    {
       OpenFileDialog open = new OpenFileDialog();
       open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp";
       if (open.ShowDialog()==DialogResult.OK)
       {
            pictureBox1.Image = new Bitmap(open.FileName);
       }
    }
    catch (Exception)
    {
        throw new ApplicationException("Failed loading image");
    }

}//End of the loading picture function

在这段代码中,问题是在这段代码中我的dll不知道gui中有一个图片框pictureBox1.Image!

最后我没有看到如何嵌套dll和gui。

感谢您的帮助; - )

1 个答案:

答案 0 :(得分:1)

从动态链接库(DLL / .dll)中为您在运行时决定的各种表单调用WinForm类(class MyForm : Form)(我认为这是您要问的但是谁知道),您将需要使用System.Reflection并执行以下操作

if (bIfDllIsWinForm) 
{ 
    classInstance = Activator.CreateInstance(classType); 
    Form dllWinForm = (Form)classInstance; 
    dllWinForm.Show(); 

    // Invoke required method. 
    MethodInfo methodInfo = classType.GetMethod(strSomeMethodName); 
    if (methodInfo != null) 
    { 
        object result = null; 
        result = methodInfo.Invoke(classInst, new object[] { dllParams }); 
        return result.ToString(); 
    } 
else 
{ 
    // Else not a WinForm do something simalar. 
}    

你可以将这样的东西变成一个使用泛型的方法,并传递你的.dll中要调用的相关方法名称。

我希望这会有所帮助。