【发布时间】:2011-04-12 15:23:41
【问题描述】:
我知道不可能安全地导出函数 C++ 参数(例如 STL 字符串),因为 C++ 没有指定标准 ABI。 (我已将其作为对 How to call a function from a shared library? 的回答阅读)
人们倾向于相信如果你的库和你的程序都是用同一个编译器构建的那么这不是问题,但不幸的是,对于一些 VC++ 编译器来说,这并不完全正确.
Herb Sutter 和 Alexandrescu 在“C++ 编码标准”中建议依赖可移植类型(例如内置类型)而不是采用 string 的函数。
即在模块接口中而不是使用std::string
std::string Translate( const std::string & );
使用一个
void Translate( const char *src, char* dest, size_t destSize );
虽然他们同意这对于调用者和被调用者来说都相当复杂,但他们并没有提出更好的替代方案。
如何使用低级类型很好地传递更复杂的对象,例如std::map? (更不用说像map<string,vector<something_complex> > 这样复杂的东西了)
在导出函数时如何处理这种情况?
【问题讨论】:
标签: c++ shared-libraries