【发布时间】:2009-06-25 09:44:41
【问题描述】:
我正在寻找一种将一些数据填充到跨 DLL 边界的字符串中的方法。因为我们使用不同的编译器,所以我们所有的 dll 接口都是简单的 char*。
是否有正确的方法将指针传递给 dll 函数,以便它能够直接填充字符串缓冲区?
string stringToFillIn(100, '\0');
FunctionInDLL( stringToFillIn.c_str(), stringToFillIn.size() ); // definitely WRONG!
FunctionInDLL( const_cast<char*>(stringToFillIn.data()), stringToFillIn.size() ); // WRONG?
FunctionInDLL( &stringToFillIn[0], stringToFillIn.size() ); // WRONG?
stringToFillIn.resize( strlen( stringToFillIn.c_str() ) );
看起来最有希望的是 &stringToFillIn[0],但如果您认为 string::data() == &string[0],那么这是一种正确的方法吗?好像不一致。
或者最好吞下额外的分配并避免这个问题:
vector<char> vectorToFillIn(100);
FunctionInDLL( &vectorToFillIn[0], vectorToFillIn.size() );
string dllGaveUs( &vectorToFillIn[0] );
【问题讨论】: