原文:http://www.cnblogs.com/bomo/archive/2013/03/01/2938165.htmlhtml
不少时候咱们须要用到引用其余程序集,有些程序集是.Net生成的,能够支持反编译,而C/C++程序集不支持反编译,不能再C#项目中直接引用,咱们须要预先知道程序集中函数的签名,而后先声明为静态的函数,例如:windows
引用test.dll,该程序集包含Add方法,返回两个整型数据的和函数
[DllImport(@"c:\test.dll")] private static extern int Add(int a, int b);
而后再须要的时候使用指针
private void DoSomething() { int sum = Add(10, 20); }
可是这种方法不能改变函数的名字,下面说说如何动态添加dll程序集code
一、这里须要用到windows的API来加载程序集,先引入API函数,用于加载程序集htm
二、接下来是在代码中加载程序集,获得函数指针blog
int hModule = LoadLibrary(@"c:\test.dll"); if (hModule == 0) return false; //获得指向Add函数的指针 IntPtr intPtr = GetProcAddress(hModule, "Add");
三、获得了函数指针,可是C#不支持指针,可是C#有委托的概念,C#中也是经过委托实现指针函数的功能的,这里也经过委托来引用io
先声明一个委托编译
public delegate void MyAdd(int a, int b);
加载,获得委托(Marshal 在 System.Runtime.InteropServices 命名空间)class
MyAdd myadd = (MyAdd)Marshal.GetDelegateForFunctionPointer(intPtr, typeof(MyAdd));
四、使用该委托
int sum = myadd(10, 20);