Использование DLL в приложении Winform в C # - PullRequest
0 голосов
/ 31 марта 2012

Я хочу знать, как мы можем работать с DLL в форме приложения Windows?

Я хочу создать вид PhotoViewer, и мне нужно разделить ядро ​​приложения в DLL и графическом интерфейсе.. Так в моем графическом интерфейсе, если я нажму на данную кнопку, я вызову соответствующую функцию в 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 не знает, что в графическом интерфейсе есть изображение box pictureBox1.Image.

Наконец, я не вижу, как вложить как dll, так и графический интерфейс.

Спасибо за вашу помощь; -)

1 Ответ

1 голос
/ 01 апреля 2012

Чтобы вызвать класс WinForm (class MyForm : Form) из библиотеки динамических ссылок (DLL / .dll) для различных форм, которые вы выбираете во время выполнения (я думаю, это то, что вы спрашиваете, но кто знает), вы будетенужно использовать 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.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...