DllInvokeTool.cs 985 B

123456789101112131415161718192021222324252627282930313233
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.InteropServices;
  5. using System.Text;
  6. namespace Azylee.Core.DllUtils
  7. {
  8. public class DllInvokeTool
  9. {
  10. [DllImport("kernel32.dll")]
  11. private extern static IntPtr LoadLibrary(String path);
  12. [DllImport("kernel32.dll")]
  13. private extern static IntPtr GetProcAddress(IntPtr lib, String funcName);
  14. [DllImport("kernel32.dll")]
  15. private extern static bool FreeLibrary(IntPtr lib);
  16. private IntPtr hLib;
  17. public DllInvokeTool(String DLLPath)
  18. {
  19. hLib = LoadLibrary(DLLPath);
  20. }
  21. ~DllInvokeTool()
  22. {
  23. FreeLibrary(hLib);
  24. }
  25. //将要执行的函数转换为委托
  26. public Delegate Invoke(String APIName, Type t)
  27. {
  28. IntPtr api = GetProcAddress(hLib, APIName);
  29. return (Delegate)Marshal.GetDelegateForFunctionPointer(api, t);
  30. }
  31. }
  32. }