2011-01-09 61 views
6

我想在我的网站项目中导入DLL文件。我在文件夹C:\ DLLDir中有dll文件“my.dll”,我使用的代码是:Asp.Net C#DllImport问题

[DllImport("C:\\DLLDir\\my.dll", EntryPoint = "Out32")] 

这工作正常。但我想使用相对路径(网站根路径)。我试图把在“bin”的“my.dll”或根文件夹,我使用的代码:

[DllImport("my.dll", EntryPoint = "Out32")] 

,但我得到的错误:无法加载DLL“my.dll” : 指定的模块无法找到。 (来自HRESULT的例外:0x8007007E)

任何想法?

+1

我认为它想要的绝对路径的DLL。 Server.MapPath应该为你做好准备 – 2011-01-09 02:18:54

+0

Server.MapPath为你提供了相对于你的web目录位置的路径。所以,如果你已经拥有了绝对的道路,那么它就不会有任何改变。 – 2011-01-09 02:26:37

回答

3

我想你可能想先看看下面的SO问题(因为它关系到你的情况下):

DllImport failed to locate DLL even though it is in the PATH

至于其他人曾建议,检查PATH环境变量,以确保C:\DLLDir\在那里。你可以阅读更多关于如何配置你的环境变量here

看看这MSDN forum post以及(似乎有依赖关系的问题)。

如果它是您正在导入的COM DLL,那么它可能还需要先在目标机器上注册(尽管我不确定是否需要这样做)。 Read more here

2

要么你没有将my.dll复制到它应该加载的Bin文件夹中。 使用Process Explorer(http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)将显示试图从哪里加载该文件。

编辑:感谢volpav提醒,它是非托管DLL - 忽略管理部分... ...程序集有一些其他的依赖关系。 查看http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57120.aspx,详细了解此类故障(查找“装配负载融合日志”获取更多链接)。

0

我相信DLL必须在你的路径上(如果不是绝对的话)。而且可能会让你感到惊讶的是,CWD不在你的道路上,除非你特别加上“。”。在你的PATH变量中。

2

转到Properties/Build选项卡,并将平台目标设置为x86