我正在寻找一种方法,在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] );
std::string
中的数据是存储为char*
。” 实际上是有保证的。std::string
使用char
。http://en.cppreference.com/w/cpp/string/basic_string - cambunctious