0

この種のコードを使用して、Web サービスからテキスト文字列を RBuf8 にダウンロードしています (動作します..)

void CMyApp::BodyReceivedL( const TDesC8& data ) {
    int newLength = iTextBuffer.Length() + data.Length();
    if (iTextBuffer.MaxLength() < newLength)
        {
            iTextBuffer.ReAllocL(newLength);
        }
    iTextBuffer.Append(data);
}

次に、RBuf8をラベルなどに表示できるchar *文字列に変換したい..またはデバッグの目的で、

RDebug::Printf("downloading text %S", charstring);

明確にするために編集..

私の変換関数は次のようになります..

void CMyApp::DownloadCompleteL() { { RBuf16 buf; buf.CreateL(iTextBuffer.Length()); buf.Copy(iTextBuffer);

    RDebug::Printf("downloaded text %S", buf);
    iTextBuffer.SetLength(0);
    iTextBuffer.ReAlloc(0);                                 
}

しかし、これでもクラッシュが発生します。S60 3rd Edition FP2 v1.1 を使用しています

4

5 に答える 5

1

void RBuf16::Copy(const TDesC8&) は、8 ビットの記述子を受け取り、それを 16 ビットの記述子に変換します。

画面に任意の 16 ビット記述子を表示できる必要があります。うまくいかない場合は、使用している特定の API を投稿してください。

未定義の数のパラメーター ( void RDebug::Printf(const char*, ...) など) で API を使用できる場合、%S は「16 ビット記述子へのポインター」に使用されます。大文字の %S に注意してください。

于 2008-12-01T12:36:54.533 に答える
1

あなたが必要とするのは、次のようなものです。

RDebug::Print( _L( "downloaded text %S" ), &buf );

このチュートリアルが役立つ場合があります。

于 2008-12-01T13:12:04.323 に答える
0

ありがとうございます。%S は便利なリマインダーです。

ただし、これは機能していないようです..私の変換関数は次のようになります..

void CMyApp::DownloadCompleteL() {
    {
        RBuf16 buf;
        buf.CreateL(iTextBuffer.Length());
        buf.Copy(iTextBuffer);

        RDebug::Printf("downloaded text %S", buf);
        iTextBuffer.SetLength(0);
        iTextBuffer.ReAlloc(0);                 
    }

しかし、これでもクラッシュが発生します。S60 3rd Edition FP2 v1.1 を使用しています

于 2008-12-01T12:44:43.520 に答える
0

RDebuf::Printf の記述子へのポインターを提供する必要があるため、

RDebug::Print(_L("downloaded text %S"), &buf);

ただし、_L の使用は推奨されません。_LIT マクロが推奨されます。

于 2008-12-02T15:47:07.660 に答える
-1

quickrecipesonsymbainosblogspotcom で述べられているように、記述子へのポインターを渡す必要があります。

RDebug::Printf("downloaded text %S", &buf); //note the address-of operator

RBuf8から派生しているため、これは機能しTDes8ます (16 ビット バージョンでも同じです)。

于 2008-12-01T13:11:40.033 に答える