ASP.NET无法加载非托管DLL的解决办法

今天遇到了一个非托管组件加载的问题。错误讯息如下:

无法加载 DLL“Builder1.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)

下面是具体代码:

    #region 注册体系加密
    /// <summary>
    /// 注册体系加密
    /// </summary>
    /// <param name="uname">登录名</param>
    /// <returns></returns>
    [STAThread()]
    public static string EncryptUser(string uname)
    {
        return u_Reg(uname);
    }

    [DllImport(@"Builder1.dll")]
    public static extern string u_Reg(string userid);

    #endregion

首先想到的是在即时窗口中查看这个DLL有没加载。

image

没有被加载。

网上搜索,在这里找到了答案:http://blog.csdn.net/cui55/archive/2007/05/22/1620199.aspx

ASP.NET官方团队解释:

首先需要确认你引用了哪些组件,那些是托管的,哪些是非托管的.托管的很好办,直接被使用的需要引用,间接使用的需要拷贝到bin目录下.非托管的处理会比较麻烦.实际上,你拷贝到bin没有任何帮助,因为CLR会把文件拷贝到一个临时目录下,然后在那运行web,而CLR只会拷贝托管文件,这就是为什么我们明明把非托管的dll放在了bin下却依然提示不能加载模块了.

汗···

有几种解决办法:

1,将DLL所在目录加入到系统PATH环境变量中

2,把DLL丢到System32文件夹下。

3,使用Win32 API来加载。(这位哥们有实例提供)

posted on 2011-03-10 16:43  sunshaozong  阅读(1094)  评论(0编辑  收藏  举报