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

时间:2011-04-27 23:36:42

标签: c# .net iis pinvoke 32bit-64bit

尝试使用Dll Import从c#访问旧的c ++ dll。 现在已经四天在网上寻找aprox而没有成功。

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

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

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

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

链接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 ++方法调用会导致此错误吗?读错误可以猜测调用一个应该接收4的3个参数的函数会导致这个错误。

1 个答案:

答案 0 :(得分:3)

很好地回答你的上一个问题:

  

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

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

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

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