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有没加载。
没有被加载。
网上搜索,在这里找到了答案: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 阅读(1096) 评论(0) 编辑 收藏 举报