|
|
Log In | Not a Member? |
Contact ADC |
| < Previous PageNext Page > |
Rosettaは、翻訳時にプロセス全体を実行する必要があります。これは、アプリケーション起動時にロードする必要があるサードパーティ製のプラグインやその他のコンポーネントを使用するアプリケーションには影響があります。すべての要素(アプリケーション、プラグイン、起動時に必要な他のコンポーネント)をすべて、非ネイティブあるいはネイティブのどちらか一方で実行する必要があるからです。たとえば、アプリケーションがUniversal Binaryとしてビルドされても、PowerPCバイナリしかないプラグインを使用する場合、インテルベースのMacintoshでは非ネイティブのプラグインを使用するために、アプリケーションを非ネイティブで実行する必要があります。
Rosettaはアプリケーションを翻訳するときに、エンディアン問題を考慮します。アプリケーションとシステムプロセス間でやり取りされるマルチバイトデータは自動的に処理されるため、データのエンディアンフォーマットを気にする必要はありません。
マルチバイトデータでエンディアン問題が生じるのは、データが以下の間でやり取りされる場合です。
翻訳されるアプリケーションと、システムプロセスでないネイティブプロセス。
翻訳されるアプリケーションが提供するカスタムペーストボードと、ネイティブアプリケーションが提供するカスタムペーストボード。
翻訳されるアプリケーションが提供するデータファイルまたはキャッシュと、ネイティブアプリケーション。
Universal Binaryを開発するときに、このような状況に遭遇する可能性があります。たとえば、アプリケーションが依存するサーバプロセス用にUniversal Binaryを作成した場合、当該プロセスをテストする目的でアプリケーションをPowerPCバイナリとして実行すると、サーバからアプリケーションに渡されるデータのエンディアンフォーマットが不適切なものになります。アプリケーションのUniversal Binaryを作成しても、アプリケーションが必要とするサーバプロセスのUniversal Binaryを作成していない場合も同じ問題に遭遇します。
システムで定義され、システムルーチンを使って書かれた構造体は正しく機能します。ただし、Listing A-1のコードを考えてみてください。
Listing A-1 アーキテクチャに依存するエンディアンフォーマットの構造体
typedef struct |
{ |
int x; |
int y; |
} data_t |
void savefile(data_t data, int filehandle) |
{ |
write(filehandle, &data, sizeof(data)); |
} |
Rosettaを使用して実行すると、アプリケーションはビッグエンディアン構造体を作成し、xとyはビッグエンディアン整数として書き込まれます。インテルベースのMacintoshでアプリケーションをネイティブに実行すると、リトルエンディアン構造体が書き出され、xとyはリトルエンディアン整数として書き込まれます。ディスク上のデータフォーマットを正準エンディアンフォーマットとして定義するのは開発者次第です。データを読み書きするアプリケーションがデータのエンディアンフォーマットを理解し、データを適切に処理するかぎり、エンディアン固有のデータフォーマットでも構いません。
プライベートなフレームワークやプラグインもこのようなエンディアン問題に遭遇する可能性があることに留意してください。プライベートなフレームワークでキャッシュまたはデータファイルを作成し、そのフレームワークがUniversal Binaryである場合は、ネイティブおよびPPCプロセスのどちらのキャッシュにもアクセスしようとします。このフレームワークはデータを読み書きする際にキャッシュのエンディアンフォーマットに対応するか、2つのキャッシュを用意する必要があります。
| < Previous PageNext Page > |
Last updated: 2006-03-08
|
Get information on Apple products.
Visit the Apple Store online or at retail locations. 1-800-MY-APPLE Copyright © 2007 Apple Inc. All rights reserved. | Terms of use | Privacy Notice |