在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
封装类
using System; using System.Data; using System.Runtime.InteropServices; /// <summary> /// 非托管DLL调用类 /// </summary> public class DllInvoke { private IntPtr hLib; [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); /// <summary> /// dll存放的绝对路径 /// </summary> /// <param name="DLLPath"></param> public DllInvoke(string DLLPath) { hLib = LoadLibrary(DLLPath); } ~DllInvoke() { FreeLibrary(hLib); } /// <summary> /// 释放dll的资源 /// </summary> public void FreeLib() { FreeLibrary(hLib); } /// <summary> /// 创建dll中函数的委托函数 /// </summary> /// <param name="APIName">要调用的dll的函数</param> /// <param name="t">委托函数的类型</param> /// <returns></returns> public Delegate Invoke(string APIName, Type t) { IntPtr api = GetProcAddress(hLib, APIName); return (Delegate)Marshal.GetDelegateForFunctionPointer(api, t); } } 应用以上方式,可以把非托管的dll放在网站的目录下,用相对路径进行调用。 需要特别注意的是,在部署到IIS上时,需要设置相应应用程序池的标识,否则调用会报错:IIS7(windows7)设置为管理员的账号密码,IIS6设置为本地服务即可
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论