Я знаю, что невозможно безопасно экспортировать параметры функции C ++ (например, строки STL), потому что C ++ не определяет стандартный ABI.(Я читал это как ответ на Как вызвать функцию из общей библиотеки? )
Люди склонны считать, что , если ваша библиотека и ваша программа былипостроенный с тем же компилятором , тогда это не проблема, но, к сожалению, для некоторых компиляторов VC ++ это не совсем так.переносимые типы (например, встроенные типы) вместо функции, которая принимает string
.
т.е. вместо использования std::string
в интерфейсе модуля
std::string Translate( const std::string & );
используйте
void Translate( const char *src, char* dest, size_t destSize );
Хотя они согласны, что это довольно сложно как для вызывающей, так и дляcallee, они не предлагают более хорошую альтернативу.
Как можно легко передать более сложный объект, такой как std::map
, используя низкоуровневые типы?(не говоря уже о такой сложной вещи, как map<string,vector<something_complex> >
)
Как вы решаете такие случаи при экспорте функций?