Ошибка LINKER: comsupp.lib и comsuppwd.lib
Ошибка:
Ошибка 14, ошибка LNK2005: "void __stdcall _set_com_error_handler(void (__stdcall*)(long,struct IErrorInfo *))" (?_Set_com_error_handler@@YGXP6GXJPAUIErrorInfo@@@Z@Z) в comsupp.jpg (comsupp.w). Lib
Кто-нибудь сталкивался с этим раньше?
1 ответ
Решение
Ошибка устранена. Причиной ошибки стал заголовочный файл: #include <msclr\marshal_cppstd.h>
и преобразование из System::String^
в std::string
(Я нашел похожую проблему здесь):
//commented out following 3 lines and problem solved:
//looks like following type conversion has problems:
#include <msclr\marshal_cppstd.h>
msclr::interop::marshal_context marshal_context_1;
string_TempDir_XMLfiles=marshal_context_1.marshal_as<std::string>(String_Ptr_Destin_Dir_XMLfiles);
Ошибка в заголовке Visual Studio 2010 <msclr/marshal.h>
. Там написано
#pragma comment(lib, "comsupp.lib")
но по сравнению с <comdef.h>
там должно быть написано
#ifdef _NATIVE_WCHAR_T_DEFINED
# ifdef _DEBUG
# pragma comment(lib, "comsuppwd.lib")
# else
# pragma comment(lib, "comsuppw.lib")
# endif
#else
# ifdef _DEBUG
# pragma comment(lib, "comsuppd.lib")
# else
# pragma comment(lib, "comsupp.lib")
# endif
#endif
См. Также раздел Lib в https://docs.microsoft.com/de-de/cpp/cpp/set-com-error-handler?view=vs-2019
Итак, у вас есть 2 варианта
- ПЛОХО: отредактируйте
msclr/marshal.h
вC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\msclr\marshal.h
. Но тогда все коллеги тоже должны изменить свое дело. - Измените ProjectSetting
Linker
->Input
->Ignore Specific Default Libraries
и добавитьcommsupp.lib
.!!! Но внимание, если вы установили параметр компилятора/Zc: wchar_t-
(видетьC/C++
->Language
->Treat WChar_t as Built in Type
) И компилируя для Release, это нельзя игнорировать!!! Таким образом, каждая конфигурация проекта может / должна изменяться по-разному.