zapisywanie bezpośrednio do wewnętrznych buforów std :: string

Szukałem sposobu na umieszczenie niektórych danych w łańcuchu przez granicę DLL. Ponieważ używamy różnych kompilatorów, wszystkie nasze interfejsy dll są prostymi znakami *.

Czy istnieje poprawny sposób na przekazanie wskaźnika do funkcji dll w taki sposób, że jest on w stanie bezpośrednio wypełnić bufor łańcucha?

<code>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() ) );
</code>

Ten, który wygląda najbardziej obiecująco, to & stringToFillIn [0], ale czy jest to właściwy sposób, biorąc pod uwagę, że uważasz, że string :: data () == & string [0]? Wydaje się to niespójne.

Czy lepiej jest połknąć dodatkową alokację i uniknąć pytania:

<code>vector<char> vectorToFillIn(100);
FunctionInDLL( &vectorToFillIn[0], vectorToFillIn.size() );
string dllGaveUs( &vectorToFillIn[0] );
</code>

questionAnswers(8)

yourAnswerToTheQuestion