Вопрос по dll, c# – Отображение формы из динамически загружаемой DLL

11

Это расширение вопроса, который я ранее задавалВот.

Короче говоря, я динамически загружаю DLL и делаюtype из этого с помощью следующего кода:

Assembly assembly = Assembly.LoadFile("C:\\test.dll");
Type type = assembly.GetType("test.dllTest");
Activator.CreateInstance(type);

Оттуда я могу использоватьtype ссылаться практически на что-либо вdllTest учебный класс. Класс по умолчанию при запуске должен вызывать форму (в данном случае довольно пустую, поэтому он не сложный).

Я чувствую, что здесь отсутствует ключевая строка кода, которая препятствует загрузке формы на экране.

dllTest.cs (внутри DLL) состоит из:

namespace test
{
    public partial class dllTest : Form
    {
        public dllTest()
        {
            InitializeComponent();
        }
    }
}

InitializeComponent() задает макет формы, который слишком длинный для вставки и не должен иметь значения.

Есть идеи?

Это не прямой ответ на ваш вопрос, но если вы собираетесь делать много из этого, вы можете проверить блок составного приложения (CAB). Это часть фабрики Smart Client Software Factory, которую можно найти здесь:msdn.microsoft.com/en-us/library/aa480482.aspx blu

Ваш Ответ

4   ответа
1

Если класс принадлежитForm тогдаAssembly.GetType() возвращаетсяNULL. If a class belongs to User Control тогда я вижу, что тип возвращается.

Также синтаксис должен быть таким:

Type type = assembly.GetType("Assemblytest.clsTest");

где

  • clsTest will be the name of class (of a user control)
  • Assemblytest is the name of assembly without the .dll extention.
3

Да, вы фактически не указываете какой-либо код для запуска вне инициализатора класса. Например, с формами вы должны фактически показать их.

Вы можете изменить свой код следующим образом ...

Assembly assembly = Assembly.LoadFile("C:\\test.dll");
Type type = assembly.GetType("test.dllTest");
Form form = Activator.CreateInstance(type) as Form;
form.ShowDialog();
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded scrot
0

Я бы пошел с:

Assembly assembly = Assembly.LoadFile("C:\\test.dll");
Type type = assembly.GetType("test.dllTest");
object obj = Activator.CreateInstance(type);
Form form = obj as Form;
if (form != null)
    form.Show(); //or ShowDilaog() whichever is needed

Другие ошибки проверки / обработки должны быть добавлены; однако, по крайней мере, я бы обеспечил конвертацию.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
14

Вы должны сделать что-то с формой, которую вы только что создали:

Assembly assembly = Assembly.LoadFile("C:\\test.dll");
Type type = assembly.GetType("test.dllTest");
Form form = (Form)Activator.CreateInstance(type);
form.ShowDialog(); // Or Application.Run(form)
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded scrot

Похожие вопросы