繁体   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