2015-04-08 3 views
0

У меня есть устаревшая dll vb.net, на которую ссылается в моем проекте C#. вызов различных методов не проблема, но мне нужно иметь возможность отображать форму из DLL, чтобы пользователи могли выбрать правильную линию из ответа базы данных.Попытка получить ссылочную dll vb.net для showdialog в C#

Assembly assembly = Assembly.LoadFile("FMSValidation.dll"); 

не производит ошибку, но

Type type = assembly.GetType (FMSValidation.CreditorDetails); 

говорит мне 'CreditorDetails' тип, который не действует в контексте.

ответ

3

assembly.GetType не принимает фактический тип. Он принимает строку:

Type type = assembly.GetType("FMSValidation.CreditorDetails"); 

Это не имело бы смысла для assembly.GetType, чтобы быть в состоянии принять тип, так как в этот момент у вас уже есть тип.

После того, как у вас есть тип, вы можете создать экземпляр этого класса с активатором:

var form = (System.Windows.Forms.Form)Activator.CreateInstance(type); 
form.ShowDialog(); 

Если CreditorDetails требует каких-либо аргументов конструктора, используйте перегрузку CreateInstance, которая принимает массив аргументов.


Похоже, что компилятор знает FMSValidation.CreditorDetails тип - так что я удивляюсь, почему вы динамически загружаются сборки и пытается использовать GetType вообще. Вы должны просто добавить ссылку на сборку и использовать ее типы, как и любой другой, например new FMSValidation.CreditorDetails().

+0

Я могу, но я пытаюсь заставить DLL запустить окно, которое кажется неохотным. – Steve

+0

Это работает так, чтобы не вызывать ошибки, но я не могу использовать 'LoadFile', поскольку я не знаю, где находится dll (это сложно). Есть ли способ получить «showdialog» для работы с типом? – Steve

+0

@Steve см. Правки. – vcsjones

0

FMSValidation.CreditorDetails это тип, но это не фактический объект Type. Если вы хотите использовать фактический объект типа, и вы можете записать имя типа в своем исходном коде (то есть оно не находится в строковой переменной или что-то еще), вы должны использовать typeof(FMSValidation.CreditorDetails) вместо assembly.GetType.

 Смежные вопросы

  • Нет связанных вопросов^_^