Q: 開発中のアプリケーションの一部の機能は Classic 環境でうまく動作しません。一部の機能が使えなくなることをユーザに知らせることができるように、Classic 環境を検出するにはどうすればいいですか?
A: Classic 環境は、「リスト 1.」に示すように Gestalt を使って検出できます。
// この Q&A の執筆時点で、Universal Interfaces の最新バージョンは
// 3.3.2。以下の定義は UI 3.3.2 には含まれていないが、
// 次のリリースバージョンには含まれる予定。
enum {
gestaltMacOSCompatibilityBoxAttr = FOUR_CHAR_CODE('bbox'),
/* Classic の存在と機能 */
gestaltMacOSCompatibilityBoxPresent = 0,
/* Classic で実行されている場合は true */
gestaltMacOSCompatibilityBoxHasSerial = 1,
/* Classic シリアルサポートが実装されている場合は true */
gestaltMacOSCompatibilityBoxless = 2
/* ボックスレス (Carbon/Cocoa と共有されるスクリーン)
の場合は true */
};
static Boolean RunningOnClassic(void)
{
UInt32 response;
return (Gestalt(gestaltMacOSCompatibilityBoxAttr,
(SInt32 *) &response) == noErr)
&& ((response &
(1 << gestaltMacOSCompatibilityBoxPresent))
!= 0);
}
|
|
リスト 1. アプリケーションが Classic 環境で実行されているかどうかを検出する
|
Q: 開発中の Carbon アプリケーションはトラディショナル Mac OS では適切に動作しますが、Mac OS X では一部の機能がうまく動作しません。プラットフォームに応じて適切な方法で動作できるように、アプリケーションが Mac OS X で実行されていることを検出するにはどうすればいいですか?
A: DTS では、プラットフォーム全体ではなく、特定の機能を対象にテストを行うことをお勧めしています。たとえば、アプリケーションがトラディショナル Mac OS 上の非 Carbon API へのアクセスを必要とする場合は、GetSharedLibrary および FindSymbol を使って、それらの API にアクセスすることをお勧めします。GetSharedLibrary を呼び出したが失敗した場合は、プラットフォームに関係なく、目的の機能にはアクセスできません。
一方、適切な機能テストが存在せず、プラットフォームのテストだけが可能なケースも知られています。このような場合、Carbon アプリケーションでは「リスト 2.」に示すように Gestalt を使用して、それが Mac OS X 上で実行されているかどうかを検出できます。
static Boolean RunningOnCarbonX(void)
{
UInt32 response;
return (Gestalt(gestaltSystemVersion,
(SInt32 *) &response) == noErr)
&& (response >= 0x01000);
}
|
|
リスト 2. Carbon アプリケーションが Mac OS X で実行されているかどうかを検出する
|
更新日:2001 年 1 月 16 日
|