Я искал способ набить некоторые данные в строку через границу 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], но это правильный способ сделать это, учитывая, что вы думаете, что строка:: data() == & string [0]? Это кажется непоследовательным.
Или лучше усвоить дополнительное выделение и избежать вопроса:
vector<char> vectorToFillIn(100);
FunctionInDLL( &vectorToFillIn[0], vectorToFillIn.size() );
string dllGaveUs( &vectorToFillIn[0] );