zoukankan      html  css  js  c++  java
  • 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

    两种原因:

    第一种为程序的运行以平台系统位数不匹配,第二种则是该死的VS整出来的...

    一般在下面三种情景下会发生.

    1.64位系统上C#调用32位的C++ *.dll

    2.64位系统上IIS发布含有32位的 *.dll应用程序时

    3.64位系统上编写C++ *.dll,在64位系统上通过 C#调用 ,可能成功,也可能失败,失败就报BadImageFormatException 异常,也是最二的一种情况.是由该死的VS整出来的

    解决方法如下:

    1.VS在64位系统下面,编译调试某个C++的API的时候,报错:未处理BadImageFormatException 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

    详见下图:

        其原因是该API是在32位系统下面开发的,在64位系统上面开发编译的时候需要将生成的目标平台设为X86

        方法是:

        在右边的“解决方案资源管理器”里,右键该项目点击属性。在属性窗口里选择“生成”——“目标平台”下拉里选中“X86"即可。见下图:

      然后保存重新编译

    原因:程序集之间的通讯要么全是64位环境下的,要么全是32位环境下的。不能混编访问。不然会出现“试图加载格式不正确的程序”的错误;

    解决办法是把发布网站的程序池开通32位兼容性即可,如下图:

    3.如果上面的没有解决,那就是VSC#工程的问题,打开对应的工程文件(*.csproj),如下图<Prefer32Bit>false</Prefer32Bit>节点

    下面是MSDN的解释:

    CSharpProjectConfigurationProperties6.Prefer32Bit 属性

    获取或设置一个标志,指示是否首选的 32 位平台。

    命名空间:  VSLangProj110

    程序集:  VSLangProj110(在 VSLangProj110.dll 中)

    语法

    C#

    bool Prefer32Bit { get; set; }

    属性值

    类型:System.Boolean

    返回表示 32 位首选项的标志。 返回true如果 32 位是首选。 否则,返回false。 

  • 相关阅读:
    距离的总和
    [leetcode] 397. Integer Replacement
    [leetcode] 396. Rotate Function
    [leetcode] 398. Random Pick Index
    [leetcode] 399. Evaluate Division
    [算法] get_lucky_price price
    Geoserver(一) Geoserver2.15.4配置发布arcgis切片
    Geoserver(二) geoserver配置mysql插件
    OpenLayers4地图实例-功能齐全
    OpenLayers Node环境安装运行构建-支持Vue集成OpenLayers
  • 原文地址:https://www.cnblogs.com/a-dou/p/5755224.html
Copyright © 2011-2022 走看看