2

AndroidNDKで使用するために移植するためのSymbianC++コードがいくつか提供されています。

このコードにはSymbian固有のコードがたくさん含まれており、C ++の経験がほとんどないため、うまくいきません。

私を遅くしている主なことは、Symbian固有のコードの通常のC++で使用する代替案を見つけようとしていることです。

その瞬間、コンパイラは認識されないタイプに対してあらゆる種類のエラーをスローします。

私の最近の調査から、これらはSymbian固有であると私が信じているタイプです。

TInt、TBool、TDesc8、RSocket、TInetAddress、TBuf、HBufc、RPointerArray

TIntとTBoolをそれぞれintとboolに変更すると、コンパイラで機能しますが、他のタイプに何を使用すればよいかわかりません。

誰かが私を助けてくれますか?特にTDesc、TBuf、HBuf、RPointerArray。


また、Symbianには2フェーズのコンストラクターがあります。

NewL

NewLc

しかし、これを通常のC ++コンストラクターに変更しても大丈夫でしょうか?


最後に、Symbianはクリーンアップスタックを使用してメモリリークを排除します。クリーンアップスタックコードを削除しても問題ありません。try/ catchステートメントに置き換える必要があると思いますか?

4

4 に答える 4

3

まだ興味があるかどうかはわかりませんが、Symbian のイディオムが EUSER.DLL (つまり、TDesC 派生クラス、RPointer* など) を使用している場合、Symbian 開発者からオープン ソースの EPL コードを取得している可能性があります。サイトに追加し、それをポートに直接追加することは実行可能なオプションです。これは、EUSER の必要なビット (およびおそらく他のビット) の移植です。

ただし、現在のコード ベースで既に他のサブシステムを多数使用している場合、これは非常に扱いにくくなります。

于 2010-04-26T21:23:03.673 に答える
2

これが非常に大きなコードベースでない場合は、ゼロから開始してすべての Android スタイルを実行する方が簡単で高速な場合があります。このアプローチが必要な場合でも、NDK/C++より迅速な場合があります。

もう 1 つのアプローチは、コアにポータブルC/C++を使用し、これを Symbian と Android の両方のバージョンで使用し、プラットフォームごとに個別に UI を行うことです。Spotify は Android と iPhone でこれを行いました。

于 2010-04-22T10:36:24.923 に答える
2

Symbian の開発に関する入門テキストを読むようにしてください。以前は Symbian サイトにいくつかの例がありましたが、必要なタイプの使用方法とそれらが提供するものについての特定のドキュメントを見つけることができると確信しています。

問題は、symbian 開発には、symbian 環境の外で直接使用できない/使用すべきではない独自のイディオムがあることです。たとえば、コンパイラに適切な例外処理メカニズムがある環境では、クリーンアップ スタックを使用した 2 フェーズの構築は不要です --inスローする Symbian コンストラクターは、あらゆる種類の騒乱につながる可能性があります。

于 2010-04-22T09:08:47.023 に答える
1

通常、Symbian OS C++ を標準 C++ に移植しようとするのは、Symbian のイディオムが何をするかを十分に理解していないため、悪い考えです。

これは、ほとんどのコードをゼロから書き直すことが正しいプロジェクトの 1 つになる可能性が非常に高いです。ターゲットにしている言語をほとんど知らない場合、間違いを犯したり、時間を無駄にしたり、新しいコードを捨てたりすることはないと思い込んでも、ほとんど意味がありません。それはすべて学習の一部です。

CleanupStack メカニズムは、停電やメモリ不足の状態など、問題が発生する可能性のあるあらゆる事態に対処するのに役立ちます。技術的には、最近では C++ の例外として実装されていますが、標準の C++ コードが通常処理する通常のエラー ケース以上のものをカバーしています。

記述子 (TDesc、TBuf、および HBuf はすべて記述子クラス階層に属します) とテンプレート (配列、キュー、リストなど) は、CleanupStack、コーディング標準、メモリ管理、整合性などの問題に対処しながら、標準 C++ で同等のものよりも前から存在します。 .

それについて知りたい場合は、関連するプラグイン: Quick Recipes On Symbian OSは、できるだけ少ないページですべてを説明しようとする最近の試みです。

開始するには、 Foundationの Web サイトも必ず確認してください。

T で始まるクラスは、スタックに割り当てることができるほど小さいことを意味します。

C のサフィックスが付いた記述子クラスは、不変であることを意図しています (ただし、通常、それらから可変記述子を作成できます)。

HBufC は、H で始まるほとんど唯一の Symbian クラスです。常にヒープに割り当てる必要があります。

C というサフィックスが付いたメソッドは、正常に戻ると、CleanupStack にオブジェクトを追加します (通常は、それが返すオブジェクトです)。そのオブジェクトをポップするのは呼び出しコード次第です。

R で始まるクラスは、スタックに割り当てられることを意図していますが、独自のヒープベースのリソースを管理します。通常、デストラクタの前に呼び出す必要があるある種の Close() メソッドがあります。

オブジェクトのコレクションとオブジェクトへのポインターのコレクションの違いを理解する典型的な方法は、コレクション内のオブジェクトの所有者です。コレクションが追加されたときにオブジェクトを所有し、削除されたときにそれらを失います (したがって、それ自体が破棄されたときにまだ含まれている各オブジェクトを削除する責任があります) か、コレクションは所有権を譲渡せず、他の何かがオブジェクトを保証する必要があります含まれているものは、コレクションの存続期間中有効なままです。

コレクションについて考えるもう 1 つの方法は、コレクションにオブジェクトを追加/コレクションからオブジェクトを取得するときに、どの程度のオブジェクトのコピーが必要かということです。

Symbian のディスクリプタ クラスとコレクション クラスは、メモリを使用するこれらのさまざまな方法をすべてカバーし、目的に応じて必要なものを選択できるようにすることを目的としています。

それを正しく行うのは確かに簡単ではありませんが、それがこのオペレーティング システムのしくみです。

于 2010-04-22T10:15:41.900 に答える