zoukankan      html  css  js  c++  java
  • 关于异常RPC_NT_INVALID_STRING_BINDING(0xC0020001)

    简介

    RPC_NT_INVALID_STRING_BINDING即无效的字符串绑定,值为0xC0020001。其定义如下:

    /
    // MessageId: RPC_NT_INVALID_STRING_BINDING
    //
    // MessageText:
    //
    // The string binding is invalid.
    //
    #define RPC_NT_INVALID_STRING_BINDING    ((NTSTATUS)0xC0020001L)

    说明

    默认情况下,作为DLL创建的C++项目的托管扩展不链接到诸如C/C++运行库(CRT)库、ATL或MFC的本地C/C++库,不使用任何静态变量。此外,项目设置还指定应在启用/NOENTRY选项的情况下链接DLL。这样做是因为与入口点的链接会导致托管代码在DllMain期间运行,这是不安全的。没有入口点的DLL无法初始化静态变量,除非是非常简单的类型,例如整数。通常在/NOENTRY DLL中没有静态变量。ATL、MFC和CRT库都依赖于静态变量,因此如果不首先进行修改,也不能从这些DLL中使用这些库。如果混合模式DLL需要使用依赖于静态的静态或库(如ATL、MFC或CRT),则必须修改DLL,以便手动初始化静态。手动初始化的第一步是确保禁用自动初始化代码,这对于混合DLL是不安全的,并且可能导致死锁。要禁用初始化代码,请执行以下步骤。

    某些DLL不与本机库链接,因此它们的DllMain不会初始化一些所需的本机子系统(如CRT或ATL)。一种推荐的解决方案是从托管DLL中删除入口点: 删除托管DLL的入口点

    1. 与/ NOENTRY联系。在解决方案资源管理器中,右键单击该项目 单击节点,单击属性。在“属性页”对话框中,单击“确定” 链接器,单击命令行,然后将此开关添加到 附加选项字段。
    2. 链接msvcrt.lib。在“属性页”对话框中,单击“链接器”, 单击输入。,然后将msvcrt.lib添加到其他依赖项 属性。
    3. 删除nochkclr.obj。在“输入”页面(与上一步骤相同的页面)中,从“附加依赖项”属性中删除nochkclr.obj。
    4. CRT中的链接。在“输入”页面(与上一步骤相同的页面)中,将__DllMainCRTStartup @ 12添加到“强制符号引用”属性中。

    异常结构信息

    ExceptionAddress: 775d4402 (KERNELBASE!RaiseException+0x00000062)
       ExceptionCode: c0020001
      ExceptionFlags: 00000001
    NumberParameters: 1
       Parameter[0]: 8007042b//真实错误码或进程退出码

  • 相关阅读:
    线段树合并
    bzoj 3675 [Apio2014]序列分割
    模版总结【长期更新】
    动态规划的题目总结(长期更新)
    搜索(另类状态BFS):NOIP 华容道
    贪心(模拟费用流):NOIP2011 观光公交
    基础算法(二分,贪心):NOIP 2012 疫情控制
    模拟(堆):USACO Jan11 瓶颈
    搜索(DLX重复覆盖模板):HDU 2295 Radar
    数学:lucas定理的总结
  • 原文地址:https://www.cnblogs.com/yilang/p/13298079.html
Copyright © 2011-2022 走看看