0xC0020001: Связывание строк недействительно. - Только в WPF

Во-первых, я должен, вероятно, сказать, что я, вероятно, на уровне 5 уровня с этим материалом... Я использую надстройку С++ в приложении WPF. Всякий раз, когда я пытаюсь выйти из программы, я получаю эту ошибку:

Необработанное исключение в 0x770d15de в Raptor.exe: 0xC0020001: привязка строки недействительна.

Я использовал эту запись , чтобы попытаться понять проблему, но мне не повезло. Одна вещь, которую я заметил, когда я использую тот же С++ addin в приложении Console, вызывая многие из тех же методов, которые используются в приложении WPF, Консоль выходит без проблем.

Я также просмотрел код С++ и не могу найти ни одну статическую переменную, объявленную где угодно. Однако есть статические методы.

Любая помощь будет очень признательна!

EDIT: я включил ряд функций отладки, чтобы увидеть, где это происходит. Он разбивал файл 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_ );
    }

Ответы

Ответ 1

Это происходит с некоторыми DLL файлами, которые не связаны с родными библиотеками, и поэтому их DllMain не инициализирует некоторую требуемую собственную подсистему (например, CRT или ATL). Похоже, что у вас есть смешанная DLL. Одним из рекомендуемых решений является удаление точки входа из управляемой DLL: удаление точки входа управляемой DLL

  1. Ссылка с /NOENTRY. В обозревателе решений щелкните правой кнопкой мыши узел проекта и выберите "Свойства". В диалоговом окне "Страницы свойств" нажмите "Линкер", нажмите "Командная строка", а затем добавьте этот переключатель в поле "Дополнительные параметры".
  2. Ссылка msvcrt.lib. В диалоговом окне "Страницы свойств" нажмите "Линкер", нажмите "Enter", а затем добавьте msvcrt.lib в свойство "Дополнительные зависимости".
  3. Удалите nochkclr.obj. На странице ввода (на той же странице, что и на предыдущем шаге) удалите nochkclr.obj из свойства Additional Dependencies.
  4. Ссылка в CRT. На странице ввода (на той же странице, что и на предыдущем шаге) добавьте __DllMainCRTStartup @12 в свойство Force Symbol References.

Более подробную информацию можно найти здесь: https://support.microsoft.com/en-us/kb/814472

Ответ 2

У меня такая же ошибка при использовании /clr-компилятора MFC exe и расширений DLL MFC. Исключение произошло при выгрузке приложения.

Через тестирование я обнаружил, что статическое объявление переменной CString (или любой класс MFC) в заголовочном файле в классе вроде: class ABC {... static CString & GetSomeStatic() {static CString var1 ("ABC"); return var1; return var1; } } was the cause of exception. }} была причиной исключения.

Перемещение GetSomeStatic() в файл cpp исправлено. Должно быть как-то связано с управляемым выполнением кода деструктора. Управляемый код не допускается при инициализации или завершении (/clr) dll. Также под /clr не допускаются глобальные статические переменные класса MFC, но статичность разрешена в тех функциях, где они инициализируются при первом использовании.