无法从 ASP.NET 调用 DLL

2024-05-07

您好,我有一个 C Dll,它将与 cobol 应用程序交互。我们想通过互联网将数据发送到cobol。

所以我创建了一个 C# DLL,它将调用 C DLL。当我执行控制台应用程序时,它工作正常,但是当我尝试从 ASP.NET 调用相同的 DLL 时,它会给出错误消息

我不明白那个错误

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

还有一些其他帖子与此相关,但这些帖子与我的背景不符 我想我失踪了permissions对于 ASP.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);

Edit:

您好,我根据您的建议更改了设置,但现在出现新错误

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,你需要将其设置为True对于 32 位站点和False对于 64 位网站。

您可以使用依赖步行者 http://www.dependencywalker.com/查看 DLL 是 32 位还是 64 位:使用View full paths(好像C:\工具栏上)以及您的 .dll 的依赖项和:

  • 如果您有 32 位操作系统,您的 .dll 可能是 64 位。您将无法加载它。
  • If you have a 64-bit OS:
    • 如果依赖项位于 System32 下,则它是 64 位 .dll
    • 如果依赖项位于 SysWOW64 下,则它是 32 位 .dll

这告诉您如何设置应用程序池。要设置应用程序池,您可以检查这个链接 https://help.webcontrolcenter.com/KB/a1114/how-to-enable-a-32-bit-application-pool-in-iis7-dedicatedvps.aspx.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法从 ASP.NET 调用 DLL 的相关文章