根据DLL获取窗体
image.png
image.png
获取某个类或者某个接口
/// <summary>
/// <para>以反射的方式从指定DLL创建指定类的实例,如果文件名中没有包含绝对路径,则自动加上系统运行目录合成绝对路径。</para>
/// <para>创建实例时自动获取登录用户的数据库连接字符串传入实例</para>
/// <para>异常:</para>
/// <para> ArgumentNullException</para>
/// <para> MissingMethodException</para>
/// <para> FileNotFoundException</para>
/// <para> FileLoadException</para>
/// <para> BadImageFormatException</para>
/// <para> SecurityException</para>
/// <para> ArgumentException</para>
/// <para> PathTooLongException</para>
/// </summary>
/// <typeparam name="T">返回的实例类型</typeparam>
/// <param name="dllFile">指定类所在DLL文件,如果没有指定绝对路径,则自动加上系统运行目录合成绝对路径</param>
/// <param name="className">用于创建实例的完全限定类名</param>
/// <param name="args">实例化时传给构造函数的参数</param>
/// <returns>实例创建成功且能成功转换成指定的类型,则返回实例对象,否则返回null</returns>
public static T CreateInstanceWithCnString<T>(string dllFile, string className, params object[] args) where T : class
{
string fullName = "";
// 在当前目录中搜索
if (File.Exists(dllFile))
{
fullName = dllFile;
}
else if (!Path.IsPathRooted(dllFile))
{
fullName = Path.Combine(CoreOption.SystemRunPath, dllFile);
// 在系统运行目录中搜索
if (!File.Exists(fullName))
{
fullName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, String.Format(@"bin\{0}", dllFile));
// 在系统运行目录中的Bin目录中搜索,主要是处理Web应用程序
if (!File.Exists(fullName))
{
throw new FileNotFoundException(String.Format("应用程序缺少部件,未找到文件:{0}", fullName));
}
}
}
else
{
throw new FileNotFoundException(String.Format("应用程序缺少部件,未找到文件:{0}", dllFile));
}
if (String.IsNullOrEmpty(Erp7Runtime.UserLoginInfo.ID))
return HSAssembly.CreateInstance<T>(fullName, className);
else
return HSAssembly.CreateInstance<T>(fullName, className, LoginManagerFactory.Owner.Create().GetDBConnectionString(Erp7Runtime.UserLoginInfo.ID));
}
继续调用类 HSAssembly
public static T CreateInstance<T>(string dllFile, string className, params object[] args) where T : class
{
Assembly dll = Assembly.LoadFrom(dllFile);
Type instance = dll.GetType(className, true); // 仅为找不到类时引发错误
T rstInstance = dll.CreateInstance(className, false, BindingFlags.CreateInstance, null, args, null, null) as T;
return rstInstance;
}











网友评论