欢迎来到天天文库
浏览记录
ID:59324818
大小:60.01 KB
页数:2页
时间:2020-09-05
《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);
此文档下载收益归作者所有