using HuizhongLibrary.Log; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; namespace HuizhongLibrary { public class DllInvoke { [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); private IntPtr hLib; public DllInvoke(String DLLPath) { if (System.IO.File.Exists(DLLPath) == false) { ErrorFollow.TraceWrite("加载动态库错误", DLLPath, "文件不存在"); return; } try { hLib = LoadLibrary(DLLPath); } catch (Exception ex) { ErrorFollow.TraceWrite("加载动态库错误", DLLPath, ex.Message); } } ~DllInvoke() { FreeLibrary(hLib); } public int GetHandle() { return hLib.ToInt32(); } //将要执行的函数转换为委托 public Delegate Invoke(String APIName, Type t) { IntPtr api = GetProcAddress(hLib, APIName); return (Delegate)Marshal.GetDelegateForFunctionPointer(api, t); } public delegate int Compile(String command, StringBuilder inf); public void test() { //编译 DllInvoke dll = new DllInvoke("~/Bin/Judge.dll"); Compile compile = (Compile)dll.Invoke("Compile", typeof(Compile)); //compile();//这里就是调用我的DLL里定义的Compile函数 } } }