문제

예를 들어 서브 스트링을 얻기 위해 TDESC 줄을 조작하는 선호/가장 쉬운 방법은 무엇입니까?

내 시나리오의 예를 드리겠습니다.

RBuf16 buf;
...
CEikLabel label;
...
label->SetTextL(buf); // (SetTextL takes a const TDesC&)

Buf에서 하위 문자열을 얻고 싶습니다. 그렇다면 RBUF16을 직접 조작하고 싶습니까? 그렇다면 가장 좋은 방법은 무엇입니까?

Const Char*로 변환하는 방법이 있습니까? 따라서 표준 C 문자열 조작을 사용할 수 있습니다.

미리 감사드립니다

도움이 되었습니까?

해결책

descriptors.blogspot.com을 읽으십시오 (로드 한 후에 아래로 스크롤).

tdes :: lefttptr, tdes :: righttptr 또는 tdes :: midtptr을 사용할 수 있으며, 이는 TPTR (즉, 원래 데이터를 조작하는 설명 자)로서 하위 문자열을 제공합니다.

서브 스트링의 사본을 만들려면 tdes :: 복사 기능을 사용할 수 있습니다.

다른 팁

최고 여부에 대해서는 언급 할 수 없지만 다음 방법을 사용하여 디스크립터에서 하위 스트링을 추출합니다.

TDes::LeftTPtr()
TDes::MidTPtr()
TDes::RightTPtr()

또는

TDesC::Left()
TDesC::Mid()
TDesC::Right()

두 세트 사이의 차이는 전자가 새로운 수정 가능한 디스크립터를 반환한다는 것입니다. 후자는 서브 스트링을 포함하는 새로운 수정 불가능한 설명 자입니다.

당신이 Symbian 플랫폼을 개발하는 동안, 나는 Symbian 컨벤션을 따르고, 표준 C 또는 C ++ 관점에서 Symbian C ++를 항상 생각하지 말 것을 제안합니다. Symbian이 직접 지원하거나 직접 지원하지 않을 수있는 표준 C/C ++ 라이브러리 대신 Symbian이 구체적으로 제공 한 라이브러리를 사용하십시오. Symbian에서 개발 된 응용 프로그램의 궁극적 인 목표는 응용 프로그램의 신뢰성과 견고성이 가장 중요한 모바일 장치에서 실행되는 것이므로 Symbian이 선호하고 제안하는 것을 고수해야합니다.

RBUF16에서 서브 스트링을 원한다면 간단합니다. TDes16::MidTPtr

이 작업을 수행하여 Const Char*를 변환 할 수 있습니다.

TPtr8 narrowBuf;

// Create a buffer with enough space to store every character, plus one for 
// a null terminator
narrowBuf.AllocL( buf.Length() + 1);

// TPtr8::Copy accepts a TDesC16 
narrowBuf.Copy( buf );

// Append a null terminator and return a pointer to the resultant data
const char* ptr = (const char*)narrowBuf.PtrZ();

그러나 지금 당신이 가지고있는 것은 원래 데이터의 좁은 사본입니다. 이제 레이블을 다시 설정하려면 사용하기 전에 레이블을 넓어야합니다 (TDES16 :: COPY (CONST TDESC8 &)). Symbian을 Char*와 WCHAR_T*로 "정상"C ++처럼 보이게하려고 시도하는 것은 실제로 작동하지 않습니다. 설명자를 사용하는 것은 OS에서 너무 강력합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top