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>