C#动态调用Dll的开发方法.doc

C#动态调用Dll的开发方法.doc

ID:59324818

大小:60.01 KB

页数:2页

时间:2020-09-05

C#动态调用Dll的开发方法.doc_第1页
C#动态调用Dll的开发方法.doc_第2页
资源描述:

《C#动态调用Dll的开发方法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、关于C#动态调用Dll的开发方法前段时间做了一个项目,其中要求调用一个VC6开发的Dll文件,而该文件有多个不同的版本,所以要支持动态调用,并支持卸载。在收集了一些这方面的资料后,编写了下面的类,该类可以方便的调用各种类型的dll,而且简单实用。[c-sharp] viewplaincopy1.using System;  2.using System.Collections.Generic;  3.using System.Text;  4.using System.Runtime.InteropServices

2、;  5.  6.namespace testdll  7.{  8.    /// 

  9.    ///   10.    ///   11.    class InvokeDll  12.    {  13.        #region Win API  14.        [DllImport("kernel32.dll")]  15.        private extern static IntPtr LoadLibrary(string path);  16

3、.  17.        [DllImport("kernel32.dll")]  18.        private extern static IntPtr GetProcAddress(IntPtr lib, string funcName);  19.  20.        [DllImport("kernel32.dll")]  21.        private extern static bool FreeLibrary(IntPtr lib);  22.        #endregion 

4、 23.  24.        private IntPtr hLib;  25.        public InvokeDll(String DLLPath)  26.        {  27.            hLib = LoadLibrary(DLLPath);  28.        }  29.  30.        ~InvokeDll()  1.        {  2.            FreeLibrary(hLib);              3.        }  4

5、.  5.        //将要执行的函数转换为委托  6.        public Delegate Invoke (string APIName,Type t)    7.        {  8.            IntPtr api = GetProcAddress(hLib, APIName);  9.            if (api == IntPtr.Zero)  10.                return null;  11.            else  12.   

6、             return Marshal.GetDelegateForFunctionPointer(api, t);  13.        }  14.}  15.  16.    }   使用时,先根据dll中的命令写出相关的代理publicdelegateintMsgBox(inthwnd,stringmsg,stringcpp,intok);publicdelegateintDeleteFile(stringmsg);然后按下面的代码做就可以了。[c-sharp] viewplaincopy

7、1.InvokeDll dll = new InvokeDll("user32.dll");  2.MsgBox mymsg = (MsgBox)dll.Invoke("MessageBoxA", typeof(MsgBox));  3.mymsg(this.Handle.ToInt32(), "txtmsg", "titleText", 64);  4.  5.  6.InvokeDll dll1 = new InvokeDll("kernel32.dll");  7.DeleteFile df= (Delete

8、File)dll1.Invoke("DeleteFileA", typeof(DeleteFile));  8.df(deletedfilename);

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。