【发布时间】:2016-06-08 23:48:18
【问题描述】:
我有一对调用非托管 dll(用 Delphi 编写)的 aspnet C# 应用程序。应用程序安装在 IIS 上。当两个应用程序中的任何一个尝试调用非托管 dll 时,将报告以下错误(两种情况下的错误相同):
“无法加载 DLL 'dllName.dll':动态链接库 (DLL) 初始化例程失败。(来自 HRESULT 的异常:0x8007045A)”
以下是有关应用程序的一些详细信息:
- 明确一点:Web 应用程序是完全独立的:每个应用程序都单独安装在 iis 服务器上,每个应用程序都有自己的非托管 dll 副本。
- 应用程序使用 microsoft web setup 项目安装在 iis 上。
- VS版本:VS2015
- 错误只发生在 windows 10/iis 10 上
- 使用 dotnet v4.0 用 C# 编写的 aspnet 应用程序
- 一个应用程序是用 aspnet webforms 框架编写的,另一个应用程序是用 aspnet MVC4 框架编写的。
- 应用程序已使用“任何 cpu”选项编译
- 非托管 dll 是使用 32 位 Delphi 编译器编译的
- 这些应用程序可以在其他 Windows 版本(已验证的 ws2008、ws2012、win7、win8、ws2003、winvista)上正常运行
- 两个应用程序在调用非托管 dll 时都会抛出相同的错误。
- 用于运行应用程序的应用程序池启用了“启用 32 位应用程序”选项(这是必需的,因为使用 32 位编译器编译的非托管 dll)
- 已经尝试在 Visual Studio 中使用“x86”选项编译应用程序。仍然出现错误。
有关如何调试此问题或可能的解决方案的任何想法?谢谢!
【问题讨论】:
-
您可能需要询问库的作者或对其进行调试。
DllMain中的某些东西正在爆炸并做一些 Windows 10 不喜欢的事情。 -
你看到this question的答案了吗?可能缺少另一个运行时 dll,并且您的 dll 由于该依赖性而无法加载。
-
vcsjones:实际上我可以访问 dll 的代码,但是当它崩溃时调用的函数是非常简单的代码,我相信它一定是别的东西,ventiseis:我会检查是否有一些运行时dll 丢失可能试图从 ac# 控制台应用程序调用 dll。如果我发现了什么,我会报告。
-
我已经能够运行应用程序了:问题在于 delphi dll 是加密的。未加密的 dll 可与 Web 应用程序一起正常工作。此问题与用于加密 delphi dll 的加密软件有关。感谢 cmets!