Я хочу получить wstring из указателя на текст, для которого задано смещение и длина.
typedef struct SPVTEXTFRAG
{
struct SPVTEXTFRAG *pNext;
SPVSTATE State;
LPCWSTR pTextStart;
ULONG ulTextLen;
ULONG ulTextSrcOffset;
} SPVTEXTFRAG;
pTextStart is a pointer to the beginning of the text associated with the fragment.
ulTextLen is the length of this text, in WCHARs.
ulTextSrcOffset is the offset of the first character of the text associated with the fragment.
Finally, State is the SAPI 5.0 XML state associated with this fragment.
See the XML TTS Tutorial for more details.
Я попробовал следующее:
wstring sText;
sText = nFragList->pTextStart;
sText = sText.substr(nFragList->ulTextSrcOffset,nFragList->ulTextLen);
Но что это совершенно странно, результирующая строка отрубается в неправильном месте и слишком коротка.
Может ли кто-нибудь с более глубоким пониманием LPCWSTR, возможно, сказать мне, как это сделать правильно?
Большое спасибо!
Проблема на самом деле ваше понимание SPVTEXTFRAG
, Это один фрагмент, поэтому он должен быть отрублен. Вы должны собрать все фрагменты. Последний фрагмент может быть распознан pNext==nullptr
,
Также не стоит звонить substr
на фрагменте. Это уже фрагмент, вам не нужны фрагменты фрагментов.
Других решений пока нет …