关于动态调用Dll的方法
2009-03-03 15:33
423 查看
前段时间做了一个项目,其中要求调用一个VC6开发的Dll文件,而该文件有多个不同的版本,所以要支持动态调用,并支持卸载。
在收集了一些这方面的资料后,编写了下面的类,该类可以方便的调用各种类型的dll,而且简单实用。
使用时,先根据dll中的命令写出相关的代理
public delegate int MsgBox(int hwnd,string msg,string cpp,int ok);
public delegate int DeleteFile(string msg);
然后按下面的代码做就可以了。
在收集了一些这方面的资料后,编写了下面的类,该类可以方便的调用各种类型的dll,而且简单实用。
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace testdll { /// <summary> /// /// </summary> class InvokeDll { #region Win API [DllImport("kernel32.dll")] private extern static IntPtr LoadLibrary(string path); [DllImport("kernel32.dll")] private extern static IntPtr GetProcAddress(IntPtr lib, string funcName); [DllImport("kernel32.dll")] private extern static bool FreeLibrary(IntPtr lib); #endregion private IntPtr hLib; public InvokeDll(String DLLPath) { hLib = LoadLibrary(DLLPath); } ~InvokeDll() { FreeLibrary(hLib); } //将要执行的函数转换为委托 public Delegate Invoke (string APIName,Type t) { IntPtr api = GetProcAddress(hLib, APIName); if (api == IntPtr.Zero) return null; else return Marshal.GetDelegateForFunctionPointer(api, t); } } }
使用时,先根据dll中的命令写出相关的代理
public delegate int MsgBox(int hwnd,string msg,string cpp,int ok);
public delegate int DeleteFile(string msg);
然后按下面的代码做就可以了。
InvokeDll dll = new InvokeDll("user32.dll"); MsgBox mymsg = (MsgBox)dll.Invoke("MessageBoxA", typeof(MsgBox)); mymsg(this.Handle.ToInt32(), "txtmsg", "titleText", 64); InvokeDll dll1 = new InvokeDll("kernel32.dll"); DeleteFile df= (DeleteFile)dll1.Invoke("DeleteFileA", typeof(DeleteFile)); df(deletedfilename);
相关文章推荐
- 关于动态调用Dll的方法
- 关于C#动态调用VC Dll的方法(转)
- 关于动态调用动态库方法说明
- 关于Java调用dll的方法
- dll动态链接库之用类写配置文件和调用判断方法接口的实现中遇到的若干问题
- 通过DLL路径,实现动态调用动态链接库中指定类的(静态)方法和属性
- C#反射动态调用dll中的方法,并返回结果
- delphi动态调用DLL的方法与技巧
- C++动态加载DLL调用方法
- 利用反射从程序集dll中动态调用方法(附demo下载)
- 关于Struts2 使用! 感叹号 动态调用Action中的方法
- 关于C#如何动态加载程序并调用其中某个类的方法
- 关于动态调用webservice的方法
- Delphi中动态调用DLL的方法
- VC动态调用DLL的调试方法
- 调用DLL有两种方法(静态调用和动态调用)简介
- C#动态调用c++DLL的方法
- JDK动态代理中关于InvocationHandler中invoke()方法的调用问题
- MFC创建动态链接库DLL并调用方法详解
- 动态链接库dll创建静动态调用方法一例