ASP.NET中的P / Invoke(未找到DLL的异常)

时间:2012-03-27 08:38:07

标签: c# c++ asp.net dll

我有一个.dll,我生成了一个C ++项目。我必须在我的ASP.NET项目中使用这个dll,并且我已经在我的项目中编写了相同的DllImport函数。

App_Code内的静态类有一些DllImport函数

public static class Functions
{
    [DllImport("MyFav.dll", EntryPoint = "fnmain", 
     CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
    public static extern StringBuilder fnmain();
}

由于我无法直接在我的ASP.NET项目中添加C ++ DLL作为引用(因为它不是.NET程序集),所以我只是复制到顶级目录中。 (ASP.NET项目名称 - >右键单击 - >添加现有项目)

现在,当我尝试运行该项目时,出现以下错误:

例外:

  

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

有什么建议吗? .dll在哪里保存?

3 个答案:

答案 0 :(得分:1)

.dll应该位于asp.net应用程序的\bin文件夹中。

显然有关于如何解决dll的规则。见Dynamic-Link Library Search Order on msdn

您也可以尝试:

[DllImport("C:\path_to_dll\MyFav.dll", EntryPoint = "fnmain", 
 CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern StringBuilder fnmain();

如果所有这些都不起作用,那么您的MyFav.dll可能还有其他未解决的依赖项。您可以使用Dependency Walker来检查这些内容。

答案 1 :(得分:1)

我遇到了类似的错误,但使用的是Mono的XSP服务器。对于此服务器,解决方案是将dll放在Web应用程序的根目录中(./bin的父文件夹)。这恰好也是当前的工作目录(当从Xamarin Studio运行时),这是相关的。

答案 2 :(得分:0)

如果要与out路径一起使用,请复制项目文件夹中的dll到bin目录 。