试图在c#中获取引用的vb.net dll到showdialog

时间:2015-04-08 16:05:51

标签: c# vb.net dll showdialog

我的c#项目中引用了一个遗留的vb.net dll。 调用各种方法没问题,但我需要能够从dll中显示一个表单,这样用户就可以从数据库响应中选择正确的行。

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

不会产生错误,但

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

告诉我'CreditorDetails'是一种类型,在上下文中无效。

2 个答案:

答案 0 :(得分: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()一样使用其类型。

答案 1 :(得分:0)

FMSValidation.CreditorDetails是一种类型,但它不是实际的Type对象。如果你想要一个实际的类型对象,你可以在源代码中写出类型的名称(即它不在字符串变量或其他东西中),那么你可以使用typeof(FMSValidation.CreditorDetails)代替{{ 1}}。