-1

错误是:

错误 14 错误 LNK2005:“void __stdcall _set_com_error_handler(void (__stdcall*)(long,struct IErrorInfo *))”(?_set_com_error_handler@@YGXP6GXJPAUIErrorInfo@@@Z@Z) 已在 comsupp.lib(comsupp.obj) comsuppwd 中定义。库

有没有人遇到过这个?

4

2 回答 2

1

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

另请参阅https://docs.microsoft.com/de-de/cpp/cpp/set-com-error-handler?view=vs-2019中的 Lib 部分

所以你有2个选项

  1. 坏:编辑msclr/marshal.hin 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 编译,则不能忽略它!!!因此,每个项目配置可能/必须进行不同的更改。
于 2020-04-01T09:42:04.220 回答
0

错误现已解决。错误的原因是一个头文件:#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);
于 2015-04-21T20:25:49.730 回答