动态库是用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按钮,应用程序都异常退出。
请问出现此问题的原因是什么?如何解决此问题?如果分不够,可以再开贴加分。

解决方案 »

  1.   

    目标平台设为AnyCpu时,调用的动态库版本是32的还是64的?
      

  2.   

    目标平台设为AnyCPU时,调用的动态库是64位的,运行在Windows 7 64位操作系统下。
      

  3.   

    1. 先不关闭异常窗口,用TaskManager确认是64bit进程。
    2. 如果是32位进程,原因可能是全局CLR Loader的某种设定,这时运行
    3. C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ldr64.exe query
    4. 如果结果是0,则COMPLUS_ENABLE_64BIT被关掉了。
      

  4.   

    通过gomoku提供的方法,已解决问题,再次感谢!
      

  5.   

    请问C#是如何判断32位还是64位然后再调用不同的dll的?
      

  6.   

    请问C#是如何判断32位还是64位然后再调用不同的dll的?