尝试使用 Dll 导入从 C# 访问旧的 C++ DLL。
已经在网上搜索了大约4天,但没有成功。
我正在尝试使用来自 asp.net mvc 3 网站 .net 4 的 c++ dll。
我已将平台目标更改为 x86。
我已在 iis 中的应用程序池上将“启用 32 位应用程序”设置为 true。
将 Windows Server 2008 R2 与 iis 7.5 结合使用
有什么方法可以调试这个或获取有关可能出现问题的更多信息吗?
链接ASP.NET P/Invoke“尝试加载格式不正确的程序” https://stackoverflow.com/questions/4156118/asp-net-p-invoke-an-attempt-was-made-to-load-a-program-with-an-incorrect-format指出:
“要使用 32 位 dll,您的 Web 应用程序必须以 32 位模式运行,这是通过将 IIS 切换到以 32 位模式运行来完成的”,并提供了有关如何更改此设置的链接,但这似乎只与 IIS 有关6 和 ASP.NET 2
提前致谢!
此致
编辑1:
C# 中 C++ 方法调用的错误声明是否会导致此错误?阅读错误后,我们可能会猜测,调用具有 3 个参数但应接收 4 个参数的函数会导致此错误。
好回答你的最后一个问题:
C# 中 C++ 方法调用的错误声明是否会导致此错误?
不,我不相信它会 - C++ 方法的错误声明可能会导致发生许多事情,从正确执行函数到引发互操作异常,但我不相信会引发此异常- 这是加载 dll 时出现的特定问题。
您应该检查以确保尝试加载此 dll 的进程是actually32 位进程,通过某种方式获取进程 ID(例如,通过捕获并记录异常),然后在任务管理器中进行检查。如果该进程实际上是 64 位进程,那么您可能配置不正确。
您还应该检查以确保您尝试加载的 dll(及其所有依赖项)实际上是 32 位的 - 我相信如果您尝试将 64 位 dll 加载到 32 位中,您也会遇到类似的问题位进程。您应该能够使用 Dependency walker(一个非常有用的全能工具)来检查这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)