64位WIN7下C#调用C++编写的动态库出现0x8007000B错误

dsc 2011-08-09 11:52:37
动态库是用VS2008 VC++编写,分别有64位版本和32位版本,上层应用程序用VS2008 C#编写,如果目标平台设置为x64,在Windows 7 64位系统中,应用程序调用64位的动态库时没有问题,如果目标平台设置为x86,在Windows XP/7 32位系统中,应用程序调用32位的动态库时也没有问题。
但由于上面的调用时C#应用程序要分别单独编译,为了统一为一个版本,将目标平台设置为AnyCPU,在Windows 7 64位系统时运行时,出现了异常对话框,对话框中内容如下:

Unhandled exception has occurred in your application. If you click Continue, the application will ignore the error and attempt to continue. If you click Quit, the application will close immediately.

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

无论点击Continue还是Quit按钮,应用程序都异常退出。
请问出现此问题的原因是什么?如何解决此问题?

如果分不够,可以再开贴加分。
...全文
1136 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kiter521 2013-04-18
  • 打赏
  • 举报
回复
引用 3 楼 gomoku 的回复:
1. 先不关闭异常窗口,用TaskManager确认是64bit进程。 2. 如果是32位进程,原因可能是全局CLR Loader的某种设定,这时运行 3. C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ldr64.exe query 4. 如果结果是0,则COMPLUS_ENABLE_64BIT被关掉了。 ……
请问C#是如何判断32位还是64位然后再调用不同的dll的?
kiter521 2013-04-18
  • 打赏
  • 举报
回复
请问C#是如何判断32位还是64位然后再调用不同的dll的?
zhuxu30 2012-10-22
  • 打赏
  • 举报
回复
感谢分享
bravoice 2012-03-30
  • 打赏
  • 举报
回复
感谢分享,本人也遇到类似问题。
heyfeng008 2011-08-31
  • 打赏
  • 举报
回复
如何调用
dsc 2011-08-10
  • 打赏
  • 举报
回复
通过gomoku提供的方法,已解决问题,再次感谢!
syx151 2011-08-09
  • 打赏
  • 举报
回复
目标平台设为AnyCpu时,调用的动态库版本是32的还是64的?
xu_2007 2011-08-09
  • 打赏
  • 举报
回复
看样子你只能再写一个判断操作系统类型的程序先判断系统是32位还是64位的,然后再释放出相应的客户端和动态连接库文件。
gomoku 2011-08-09
  • 打赏
  • 举报
回复
1. 先不关闭异常窗口,用TaskManager确认是64bit进程
2. 如果是32位进程,原因可能是全局CLR Loader的某种设定,这时运行
3. C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ldr64.exe query
4. 如果结果是0,则COMPLUS_ENABLE_64BIT被关掉了。
dsc 2011-08-09
  • 打赏
  • 举报
回复
目标平台设为AnyCPU时,调用的动态库是64位的,运行在Windows 7 64位操作系统下。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧