错误是:
错误 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 中定义。库
有没有人遇到过这个?
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个选项
msclr/marshal.h
in C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\msclr\marshal.h
。但是所有的同事也必须更改他们的文件。Linker
-> Input
->Ignore Specific Default Libraries
并添加commsupp.lib
. !!!但是请注意,如果您设置了编译器选项/Zc: wchar_t-
(请参阅C/C++
-> Language
-> Treat WChar_t as Built in Type
)并为 Release 编译,则不能忽略它!!!因此,每个项目配置可能/必须进行不同的更改。错误现已解决。错误的原因是一个头文件:#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);