22

首先,我可能应该说我可能在 5 年级的水平上使用这些东西......我在 WPF 应用程序中使用 C++ 插件。每当我尝试退出程序时,都会收到此错误:

Raptor.exe 中 0x770d15de 处未处理的异常:0xC0020001:字符串绑定无效。

我一直在使用这个博客条目来尝试解决问题,但我没有运气。不过我注意到的一件事是,当我在控制台应用程序中使用相同的 C++ 插件,调用 WPF 应用程序中使用的许多相同方法时,控制台会毫无问题地退出。

我也浏览了 C++ 代码,找不到任何地方声明的单个静态变量。虽然有静态方法。

任何帮助将非常感激!

编辑:我启用了一些调试功能来查看它在哪里中断。它破坏了以下最后一个括号中的 sp_counted_impl.hpp 文件(Boost):

    virtual void dispose() // nothrow
    {
#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
        boost::sp_scalar_destructor_hook( px_, sizeof(X), this );
#endif
        boost::checked_delete( px_ );
    }
4

1 回答 1

24

这发生在某些不与本机库链接的 DLL 中,因此它们的 DllMain 不会初始化某些需要的本机子系统(如 CRT 或 ATL)。听起来您有某种混合模式的 DLL。一种推荐的解决方案是从托管 DLL 中删除入口点:删除托管 DLL 的入口点

  1. 与 /NOENTRY 链接。在解决方案资源管理器中,右键单击项目节点,单击属性。在“属性页”对话框中,单击“链接器”,单击“命令行”,然后将此开关添加到“附加选项”字段。
  2. 链接 msvcrt.lib。在“属性页”对话框中,单击“链接器”,单击“输入”,然后将 msvcrt.lib 添加到“附加依赖项”属性。
  3. 删除 nochkclr.obj。在 Input 页面(与上一步相同的页面)上,从 Additional Dependencies 属性中删除 nochkclr.obj。
  4. 在 CRT 中链接。在 Input 页面(与上一步相同的页面)上,将 __DllMainCRTStartup@12 添加到 Force Symbol References 属性。

更多细节可以在这里找到:https: //support.microsoft.com/en-us/kb/814472

于 2012-08-07T20:51:50.677 回答