您的位置:首页 > 编程语言 > ASP

ASP.NET调用DLL

2017-01-08 11:19 351 查看
    public partial class _1 : System.Web.UI.Page

    {

        [DllImport("kernel32", SetLastError = true, CharSet = CharSet.Ansi)]

        static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)]string lpFileName);

        [DllImport("kernel32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]

        static extern IntPtr GetProcAddress(IntPtr hModule, string procName);

        [DllImport("kernel32.dll", SetLastError = true)]

        [return: MarshalAs(UnmanagedType.Bool)]

        static extern bool FreeLibrary(IntPtr hModule);

        delegate void DllRegisterServerInvoker(IntPtr ip, IntPtr buff);

        protected void Page_Load(object sender, EventArgs e)

        {

            string s = Request.Params["text"];

            IntPtr hDll = LoadLibrary(Server.MapPath(@"~/FindIP.dll"));

            IntPtr hProc = GetProcAddress(hDll, "_FindIP");

            DllRegisterServerInvoker drs = (DllRegisterServerInvoker)Marshal.GetDelegateForFunctionPointer(hProc, typeof(DllRegisterServerInvoker));

            string strIP = s;

            IntPtr memip = Marshal.StringToCoTaskMemAnsi(strIP);

            IntPtr membuff = Marshal.AllocHGlobal(100);// 直接分配100 byte的内存

            drs(memip, membuff);

            string str = Marshal.PtrToStringAnsi(membuff);

            FreeLibrary(hDll);

            

            Response.Write(str);

        }
    }

调用DLL要注意几个问题

1.DLL自身权限问题,因为可能写入权限不足造成失败。

2.传到服务器上时,修改应用程序池---启动32位应用程序--TRUE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: