У меня есть проект DLL и проект CLR в Visual C ++.
Проект DLL - это тот, который экспортирует функцию типа std :: map. И я назову эту функцию из моего проекта CLR.
Из проекта DLL,
staff.h
#ifdef STAFFS_EXPORTS
#define STAFFS_API __declspec(dllexport)
#else
#define STAFFS_API __declspec(dllimport)
#endif
#include <string>
#include <map>
namespace Staffs {
// other exported functions
....
//
extern "C" STAFFS_API auto GetStaffMap() -> std::map<int, std::string>;
}
staff.cpp
namespace Staffs {
std::map<int, std::string> staffMap;
extern "C" auto GetStaffMap() -> std::map<int, std::string> {
return staffMap;
}
void display_json(json::value const & jvalue, utility::string_t const & prefix)
{
// some code being skipped here
.......
//
staffMap.insert(std::make_pair(key, value));
}
}
Но когда я попытался скомпилировать свой проект DLL, я получил несколько ошибок:
Error C2526 'GetStaffMap': C linkage function cannot return C++ class 'std::map<int,std::string,std::less<int>,std::allocator<std::pair<const _Kty,_Ty>>>' AmsCppRest c:\users\laptop-attendance\source\repos\amscpprest\amscpprest\staff.h 18
Error C2556 'std::map<int,std::string,std::less<int>,std::allocator<std::pair<const _Kty,_Ty>>> Staffs::GetStaffMap(void)': overloaded function differs only by return type from 'void Staffs::GetStaffMap(void)' AmsCppRest c:\users\laptop-attendance\source\repos\amscpprest\amscpprest\staff.cpp 38
Error C2371 'Staffs::GetStaffMap': redefinition; different basic types AmsCppRest c:\users\laptop-attendance\source\repos\amscpprest\amscpprest\staff.cpp 38
Я не могу найти решение, связанное с этой проблемой.