Ошибка 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 варианта

  1. ПЛОХО: отредактируйте msclr/marshal.h в C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\msclr\marshal.h. Но тогда все коллеги тоже должны изменить свое дело.
  2. Измените ProjectSetting Linker -> Input -> Ignore Specific Default Libraries и добавить commsupp.lib.!!! Но внимание, если вы установили параметр компилятора/Zc: wchar_t- (видеть C/C++ -> Language -> Treat WChar_t as Built in Type) И компилируя для Release, это нельзя игнорировать!!! Таким образом, каждая конфигурация проекта может / должна изменяться по-разному.
Другие вопросы по тегам