2012-03-27 45 views
1

我有一個.dll,我生成一個C++項目。我必須在我的ASP.NET項目中使用此dll,並且在我的項目中編寫了相同的DllImport函數。P/Invoke在ASP.NET中(找不到例外)

App_Code靜態類有一些DllImport功能

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

因爲我無法直接添加了C++的dll在我的ASP.NET項目的引用(因爲它不是一個.NET程序集),我只是複製到頂級目錄。 (ASP.NET項目 - 名稱>右鍵 - >添加現有項)

現在,當我嘗試運行項目時,我得到以下錯誤:

例外:

Unable to load DLL 'MyFav.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

有什麼建議麼? .dll在哪裏存放?

+0

也許dll找不到,也許找到了dll,但是你已經使用了一些庫(如mfc)並且沒有在asp.net帳戶使用的目錄中找到 – Aristos 2012-03-27 08:43:16

回答

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來檢查這些。

+0

也可以使用LoadLibrary來使用LoadLibrary加載DLL它的當前位置的完整路徑。 – Ben 2012-03-27 09:15:01

+0

我試圖將.dll放在\ bin文件夾中,但沒有工作,然後使用完整路徑然後工作。但是,對於.dll的完整路徑,雖然它找到了dll,但是當我嘗試啓動該函數時出現錯誤。錯誤截圖:http://i.imgur.com/Qq5vM.png – Cipher 2012-03-27 09:23:51

+0

@Cipher從我可以告訴這可能是'MyFav.dll'中的錯誤,而不是因爲你引用了錯誤。 – gideon 2012-03-27 09:25:00

0

如果要與路徑外複製一起使用,請將dll粘貼到項目文件夾 的bin目錄中。

1

我有類似的錯誤,但使用Mono的XSP服務器。對於這臺服務器,解決方案是將dll放入您的Web應用程序的根目錄(父文件夾./bin)。這恰好也是當前的工作目錄(當從Xamarin Studio運行時),這是相關的。

相關問題