来自c#的PInvoke c ++ dll – 尝试加载格式不正确的程序。 (HRESULTexception:0x8007000B)

尝试使用Dll Import从c#访问旧的c ++ dll。 现在四天在网上搜索aprox 4天没有成功。

我正在尝试使用asp.net mvc 3网站.net 4中的c ++ dll。

我已将平台目标更改为x86。 我在iis中的应用程序池中将“启用32位应用程序”设置为true。

将Windows Server 2008 R2与iis 7.5配合使用

有没有办法调试这个或获得有关可能出错的更多信息?

ASP.NET P / Invoke链接“尝试加载具有不正确格式的程序”指出:

“要使用32位dll,您的Web应用程序必须以32位模式运行,这通过将IIS切换为以32位模式运行来完成”,并提供有关如何更改此内容的链接,但这似乎只涉及IIS 6和asp.net 2

提前致谢! 最好的祝福

编辑1:在c#中错误地声明c ++方法调用会导致此错误吗? 读错误可以猜测,调用具有3个参数的函数应该接收4将导致此错误。

那么回答你的上一个问题:

在c#中错误地声明C ++方法调用会导致此错误吗?

不,我不相信它会 – 错误地声明C ++方法可能导致许多事情发生,从正确执行的函数到抛出的互操作exception,但是我不相信会抛出这个exception – 这是特定于加载DLL的问题。

您应该检查以确保尝试加载此dll的进程实际上是一个32位进程,通过某种方式获取进程ID(例如,通过捕获并记录exception),然后检入任务管理器。 如果该进程实际上是64位进程,那么您可能错误地配置了某些内容。

您还应检查以确保您尝试加载的DLL(及其所有依赖项)实际上是32位 – 我相信如果您尝试将64位dll加载到32位,您将遇到类似的问题位过程。 您应该能够使用Dependency walker(一个全面的非常有用的工具)来检查这一点。