ASP.NET调用DELPHI DLL

http://www.cnblogs.com/nj04w/archive/2010/08/10/1796813.html

封装类

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2012-12-18 09:34  chulia  阅读(214)  评论(1编辑  收藏  举报

导航