簡體   English   中英

無法從ASP.NET調用DLL

[英]Unable to call the DLL from ASP.NET

嗨,我有一個C dll,它將與cobol應用程序進行交互。 我們想通過互聯網將數據發送到cobol。

所以我創建了一個C#DLL,它將調用C DLL。 當我做一個consoleapp時,它的工作正常,但是當我嘗試從ASP.NET調用相同的DLL時,它給出錯誤消息

我不明白這個錯誤

An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

還有其他一些相關的帖子,但那些不符合我的上下文我認為我缺少asp.net的permissions

這是我的c#dll中用於調用c dll的聲明

[DllImport(@"C:\CCExpert\haz450cp.dll", EntryPoint = "Methodname", CallingConvention = CallingConvention.Cdecl)]
    unsafe public static extern void Methodname(ref p1, ref p2);

編輯:

嗨我根據你的建議改變了設置,但現在我得到一個新的錯誤

Microsoft Visual Studio C Runtime Library has detected a fatal error in w3wp.exe

如果你有一個C .dll,它將是32位或64位。 您必須確保您的站點在正確的平台上運行(即,您的站點作為匹配的32/64位站點運行。)

在IIS 7中,您可以通過右鍵單擊應用程序池並選擇“ Advanced Settings來配置應用程序池的位數。 有一個名為Enable 32-bit applications設置,你需要為32位站點設置為True ,為64位站點設置為False

您可以使用Dependency Walker查看DLL是32位還是64位:使用View full paths (在工具欄上看起來像C:\\ )以及.dll的依賴項和:

  • 如果你有32位操作系統,你的.dll可能是64位。 你將無法加載它。
  • 如果您有64位操作系統:
    • 如果依賴項在System32下,則它是64位.dll
    • 如果依賴項在SysWOW64下,則它是32位.dll

這告訴您如何設置應用程序池。 要設置應用程序池,您可以查看此鏈接

確保在打開應用程序池屬性時使用“ Advanced Settings ,而不是基本設置。 此外,當您為站點啟用屬性時,這些設置不可用 - 它們僅適用於應用程序池。

導致此問題的最可能原因是您嘗試將32位DLL加載到64位進程(反之亦然)。 要驗證或排除此問題,請檢查Asp.Net是否以64位模式運行,如果是,則需要64位版本的C DLL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM