动态链接库初探
这几天由于项目原因,初次接触动态链接库,后在网上查了下,了解到要深入理解动态链接库(涉及到反射机制等),要花很大的精力,里面的水很深!故作为初学者,我也只是略微学习下基础的要用的操作,至于更高深的东西,等以后再次用到再细究。下面切入正题。
首先大概讲下dll文件的由来(由于我初次学习的时候就碰到这个问题,当时总是纠结这个dll怎么生成的,用了什么函数?)。要写dll,我们首先要建立一个类库(VS2010),然后再里面写入方法,编译之后就能在项目中找到dll文件,dll文件一般是打不开的哦!除非用特殊的软件。有人会问,那要是要调试的时候怎么办呢,呵呵,这时,你就可以通过调试进入dll文件,看到它里面的内容哦!有了dll文件,我们怎么用呢?这时我们就要封装一个类,通过这个类中的函数来调用dll文件。我们只需调用这个类函数,传入参数即可了。呵呵,现在是不是感觉入门很简单,下面我给出个用控制台调用的dll例子。
1.用VS2010新建一类库项目,代码如下
首先大概讲下dll文件的由来(由于我初次学习的时候就碰到这个问题,当时总是纠结这个dll怎么生成的,用了什么函数?)。要写dll,我们首先要建立一个类库(VS2010),然后再里面写入方法,编译之后就能在项目中找到dll文件,dll文件一般是打不开的哦!除非用特殊的软件。有人会问,那要是要调试的时候怎么办呢,呵呵,这时,你就可以通过调试进入dll文件,看到它里面的内容哦!有了dll文件,我们怎么用呢?这时我们就要封装一个类,通过这个类中的函数来调用dll文件。我们只需调用这个类函数,传入参数即可了。呵呵,现在是不是感觉入门很简单,下面我给出个用控制台调用的dll例子。
1.用VS2010新建一类库项目,代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ClassLibrary3
{
public class Class1
{
public int add(int a,int b)
{
int c = a + b;
return c;
}
}
}
2.在该解决方案下新建一控制台程序,并现在该程序的引用文件夹中引用步骤1创建的类库命名空间(另外在代码中还要再次添加其命名空间哦)。代码如下
using System;
using System.Linq;
using System.IO;
using ClassLibrary3; //使用其命名空间
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args) //主函数调用dll
{
int a = 4, b = 5,c;
Assembly ass;
Type type;
object obj;
ass = Assembly.LoadFrom(@"C:\xxxx\Visual Studio 2010\Projects\ClassLibrary3\ClassLibrary3\bin\Debug\ClassLibrary3.dll");
type = ass.GetType("ClassLibrary3.Class1"); //获取类型,dll库"命名空间.类名"
MethodInfo MI = type.GetMethod("add"); //获取待调用dll的方法名
obj = ass.CreateInstance("ClassLibrary3.Class1"); //创建实例,dll库"命名空间.类名"
object[] postedParams = new object[] { a,b }; //传递参数
c=(int)MI.Invoke(obj, postedParams); //调用dll
Console.Write(c);
Console.ReadKey();
}
}
}
在VS2010中能够编译通过! 最后欢迎各位大牛指正交流!