【C#】动态加载dll程序集

原文: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

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

二、接下来是在代码中加载程序集,获得函数指针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);
相关文章
相关标签/搜索