太阳是黑色的

少年听雨歌楼上,红烛昏罗帐.壮年听雨客舟中,江阔云低断雁叫西风. 而今听雨僧庐下,鬓已星星也! 悲欢离合总无情,一任阶前点滴到天明.

Archive for 21 7 月, 2004

解决了动态加载的问题

果然,在网上查了一些资料以后,终于动态加载了dll并且调用了里面的方法。其实搞懂了以后还是很简单的。具体实现的代码如下:

1
2
3
4
5
6
7
8
9
Assembly ass;
ass=Assembly.LoadFrom(Server.MapPath("")+"\\bin\\kernel.dll");
Type myType=ass.GetType("Kernel.DbControl");
MethodInfo mi=myType.GetMethod("ViewAllData");
Object[] arg=new object[1];
arg[0]=Server.MapPath("");
Object obj = Activator.CreateInstance(myType,arg);
Test.DataSource=(DataSet)mi.Invoke(obj,null);
Test.DataBind();

首先要把dll加载进来。然后得到特定的类名。再就是得到这个类里里面某个方法。最重要的一句就是:Object obj = Activator.CreateInstance(myType,arg); 这句的作用就是使这个类实例化。注意,实例化可以带上参数(这要看构造函数是什么样子的)。实例化了类以后就是调用方法,也和实例化类一样,要有参数的传递。当然,最好强制转换一下类型。

开始工作

今天正式开始工作了。应该说,两个人在一起的效率的确很高,至少要比一个人要高很多。第一天还是有一些收获的。比如先是做了一个dll,然后把数据库操作封装到了这个dll里面。再在一个web application里面调用这个dll。这个做的还是很成功的。中间有一个小问题就是,在dll里面,如何得到当前的工作路径。没有解决!只有从web application里面把这个路径传过去。当然这也是一种折中的方法。然后开始试验动态载入程序集。应该说,动态载入本身是没有难度的,关键是如何运行类里面的方法。这个就不是那么容易了。试验了很多,都不行。在网上查了一下,发现有很多类似的问题被大家都讨论过了。看看明天能不能解决这个问题。