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
- Ссылка с /NOENTRY. В обозревателе решений щелкните правой кнопкой мыши узел проекта и выберите "Свойства". В диалоговом окне "Страницы свойств" нажмите "Линкер", нажмите "Командная строка", а затем добавьте этот переключатель в поле "Дополнительные параметры".
- Ссылка msvcrt.lib. В диалоговом окне "Страницы свойств" нажмите "Линкер", нажмите "Enter", а затем добавьте msvcrt.lib в свойство "Дополнительные зависимости".
- Удалите nochkclr.obj. На странице ввода (на той же странице, что и на предыдущем шаге) удалите nochkclr.obj из свойства Additional Dependencies.
- Ссылка в 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, но статичность разрешена в тех функциях, где они инициализируются при первом использовании.