zoukankan      html  css  js  c++  java
  • ASP.NET调用DELPHI DLL

    封装类

    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设置为本地服务即可

  • 相关阅读:
    join()方法的使用
    synchronized关键字
    voliatle关键字
    一.线程概述
    NIO demo
    同步阻塞I/O
    Ubuntu16.04.1 安装Nginx
    垃圾收集
    如何从头开始安装 wordpress
    centos 6 安装 gnu c++ 等开发工具
  • 原文地址:https://www.cnblogs.com/nj04w/p/1796813.html
Copyright © 2011-2022 走看看