无法从ASP.NET调用DLL

Rag*_*eer 4 c# asp.net dll web-services

嗨,我有一个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)
Run Code Online (Sandbox Code Playgroud)

还有其他一些相关的帖子,但那些不符合我的上下文我认为我缺少permissionsasp.net

这是我的c#dll中用于调用c dll的声明

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

编辑:

嗨我根据你的建议改变了设置,但现在我得到一个新的错误

Microsoft Visual Studio C Runtime Library has detected a fatal error in w3wp.exe
Run Code Online (Sandbox Code Playgroud)

xxb*_*bcc 7

如果你有一个C .dll,它将是32位或64位.您必须确保您的站点在正确的平台上运行(即,您的站点作为匹配的32/64位站点运行.)

在IIS 7中,您可以通过右键单击应用程序池并选择来配置应用程序池的位数Advanced Settings.有一个名为的设置Enable 32-bit applications,您需要将其设置True为32位站点和False64位站点.

您可以使用Dependency Walker查看DLL是32位还是64位:使用View full paths(C:\在工具栏上看起来像)以及.dll的依赖项和:

  • 如果你有32位操作系统,你的.dll可能是64位.你将无法加载它.
  • 如果您有64位操作系统:
    • 如果依赖项在System32下,则它是64位.dll
    • 如果依赖项在SysWOW64下,则它是32位.dll

这告诉您如何设置应用程序池.要设置应用程序池,您可以查看此链接.

确保Advanced Settings在打开应用程序池属性时使用,而不是在打开基本设置时使用.此外,当您为站点启用属性时,这些设置不可用 - 它们仅适用于应用程序池.