Я использую Rhapsody OMString, и мой код должен типизировать OMstring в char *
reader.readStream((unsigned char *)MachineType,machineTypeDataSize); // MachineType is OMString
Можно ли привести OMString к char *
Если вы посмотрите на документацию ( http://pic.dhe.ibm.com/infocenter/rhaphlp/v7r6/index.jsp?topic=%2Fcom.ibm.rhp.frameworks.doc%2Ftopics%2Frhp_r_fw_omstring_class.html ), вы всегда можете использовать operator [], чтобы создать себе небольшую служебную функцию, которая преобразует объект OMString в std :: string, а затем использует метод cdstr () std :: string, чтобы получить его const char * content:
#include <string>
#include <omstring.h>
std::string omStringToStdString( const OMString& in )
{
std::string result( in.GetLength(), '\0' );
for ( std::string::size_type i = 0; i < result.length(); ++i )
{
result[ i ] = in[ i ];
}
return result;
}
РЕДАКТИРОВАТЬ: очевидно, OMString имеет оператор *, который возвращает const char * указатель на содержимое строки: ( http://pic.dhe.ibm.com/infocenter/rhaphlp/v7r6/index.jsp?topic=%2Fcom.ibm.rhp.frameworks.doc%2Ftopics%2Frhp_r_fw_operator_customize.html ), поэтому вам на самом деле не нужна функция преобразования, которую я разместил выше.
РЕДАКТИРОВАТЬ # 2: Хорошо, перечитывая вопрос OP, теперь у меня складывается впечатление, что он не хочет читать из строки OMS, но писать в одну. В этом случае метод OMString :: GetBuffer () предоставляет вам прямой доступ к внутреннему буферу объекта. Будьте осторожны, однако, вы можете легко повредить внутреннее состояние объекта OMString, если напишите больше символов, чем в буфере есть место (и, возможно, если вы вставите символы \ 0 до фактического конца буфера).