チップ: ファイルを開くために、サンプルプロジェクトの1つを開いてください、そして、 XCodeで File>オープンクィックを選択してください、そして、次に、ファイルの名前を入れてください。 序論 お互いにアプリケーションで送られた呼び出し、およびスクリプトで使用されるコマンドは同じイベント通信チャネルを使用します: AppleEvents。 AppleEventは本当に4バイトの2つのコードです。 スクリプトで、AppleScriptはそれらのコードのためのイギリスのような書式を表示します: AppleScript辞書は翻訳を提供します。 「スクリプト-可能」プログラムがそうである、実行可能である、取り扱いAppleEventsでできて、その結果、スクリプトと対話するのにおいてできます。 あなた自身のプログラムをこの取り扱いによって独立しているように保っている間、テンプレートが提供するものはあなたが容易にAppleEventsを扱うのを可能にする機能のセットです。 改良をあなたのコードにもたらすとき、あなたは別のプラットホームで改良されたコードを使用することができるでしょう。 ここで、アップルによる何らかのドキュメンテーションへのリンクは「スクリプト-可能」アプリケーションと相互アプリケーションコミュニケーションに関するものです。 サンプルプロジェクトにおける取り扱いAppleEvents SampleOsaxプロジェクト、ファイル ツォProjectNameツサで。cpはAppleEventsを扱います。 それは OsaxEventHandler、エントリー・ポイントが1つの機能である簡単なメカニズムを使用します。 SampleAppプロジェクトでは、AppleEventsはファイル main.cpで扱われます。 AppleEventsの取り扱いの大部分を Satimageインクルードにおけるファイルが定義して、あなたが変える必要はないはずである機能を使用します。 提供されたプロジェクトはどうAppleEventsを扱うかに関するいくつかの異なった例を示します。 あなたは、中で機能をあなたのコードへの呼び出しがAppleEvent(本当に4バイトの2つのコード)を量産して、捕らえて、扱います。 パスカルOSErr OsaxEventHandler(const AppleEvent*メッセージ、AppleEvent*回答、長いrefCon)。 大域変数 EventDescription gEventDescriptionList[]でAppleEventsについて説明してください。 この変数はあなたのアプリケーションが受ける出来事のリストを含んでいます。 リストの中の各個条は3つの要素です: 最初の2が4バイトの2つのコードである、最後の1つは OsaxEventHandlerが refConパラメタとして受ける(ユニーク)の整数です。 このステップに呼ばれるかもしれない機能は AppleEvent*タイプの2つの議論を持っています: メッセージと 回答。 メッセージが機能がAppleScriptから受けるものである、 回答は機能がスクリプトに返すものです。 機能の仕事は、適切なフォームに入力を作りかえて、適宜あなたのコードを呼んで、戻るために誤りか結果のどちらかを扱うことです。 AEDesc構造 メッセージは本当に主要な値(各キー(4バイト)は機能の与えられたパラメタのためにある)が対にされるので提供された物のリストです。 あなたは最初に、AppleScript変数のために AEDesc、構造としての各物を手に入れます。 (注意: AppleEventと AEDescタイプは同等です。) あなたは、 AEDescを扱って、最初に、AppleScriptから送られたデータを輸入して、そして、スクリプトが予想する結果を築き上げなければならないでしょう。 Satimageインクルード/AEDescUtils.hは例えばあなたがそれに必要とする機能、 AEDescToDouble、または FloatArrayToDescを定義します。 入力を読みます。 AEDescとしてパラメタの値を格納させるには、 AEGetParamDescを使用してください。(また、サンプルソースファイルの中の用法に関する例が提供されたのを確実にしてください。) OSErr AEGetParamDesc、( ツ??onst AppleEvent*theAppleEvent ツ??EKeyword theAEKeyword ツ??escType desiredType ツ??EDesc*結果) - theAppleEventは私たちが分析しているAppleEvent、すなわち、 メッセージです。
- theAEKeywordは必要なパラメタに関連づけられたキーです。 例えば、ダイレクトパラメタのためのキーは keyDirectObjectです。 キーはあなたが .sdefファイルで定義するあなた自身( 'Par1'などの)のコードであるかもしれません。
- desiredTypeはあなたがパラメタのために必要とするタイプについて説明します。 ユーザが必要なタイプでないパラメタを提供したなら(例えば、数があるストリングはコマンドである間、本物を予想します)、 AEGetParamDescは必要なタイプを返す試みで利用可能な強制を適用するでしょう。
AEDataModel.hであらゆるデータ型について説明する定数を与えます。そこでは、あなたが例えば、 typeChar、 typeLongFloatなどを見つけます。 さらに、 SatimageはAEDescUtils.hファイルが2つのデータ型について説明するために定数を定義するSmileとアレイを交換する/を含んでいます: typeListOfLongFloatと typeMatrix。 - 結果は結果が格納される AEDescです。
- AEGetParamDescが例えばそれが誤りを返すパラメタ、 errAECoercionFail=-1700、または errAEDescNotFound=-1701を検索することができないなら。 MacErrors.hファイルはすべての誤りについて説明します。
戻るために結果を作ります。あなたのコードがいったん走ると、機能は結果をスクリプトに返さなければなりません。 結果は AEDescが説明することができるどんな種類のデータであるかもしれませんも: 他の要素で作られたアップル、 本当のアレイか マトリクス、リストまたは記録(主要な値の組のリスト)で基本のタイプは提供しました。 戻るために AEDesc、例えばデータがある AEDesc resultDescを作ってください、そして、次に、 AEPutParamDescと呼んでください(keyAEResult&resultDesc、返答してください); メモリ取り扱い あなたのコードが「スクリプト-可能」なときに、たぶん、あなたは、それを以前より頻繁に走らせるのがわかるでしょう。 したがって、すなわち、一度呼ばれると割り当てるすべてのメモリを発表しないならあなたのコードが漏れるか、またはそれほど注意していないと(例えば、あなたのコードは構造を使用するか、そして、前の呼び出しが事情がリリースしたいくつかでそうするかもしれないポインタ)、あなたは恐ろしい不活発か繰り返されたクラッシュなどの問題を経験するでしょう。 あなたのアプリケーション、呼ぶアプリケーションのクラッシュ。 あなたは各 AEDescが AEDisposeDesc機能と共に割り当てるメモリを発表しなければなりません。 非割り当てられたポインタ(致命的な誤りである)を決して、リリースしないのを確信しているように、あなたのものを初期化してください、AEDesc、慎重に。 AEDescを申告するとき、 AEInitializeDescと呼ぶか、または以下のモデルに従ってください。 typeNull、AEDesc d=0; //初期化 間違え、=AEGetParamDesc(メッセージ、keyDirectObject、typeLongInteger、およびd); //、例 AEDisposeDesc(d); //リリースメモリ エラーを起こします。 結果を返すことの代わりにあなたのプログラムは誤りを返すかもしれなくて、スクリプトは扱われるかもしれません。 あなたは OsaxEventHandlerに(非ゼロ)エラー番号をただ返させなければなりません。 それは、プログラマとスクリプターの両方には描写的であるエラーメッセージがあるのをたくさん助けるかもしれません。 有用なエラーメッセージを作り出すために、2つの次の機能が Satimageで定義した使用は/AEDescUtils.hを含んでいます。 - OSErr PutReplyParamError(DescType desiredType、OSErrは間違えて、const AppleEvent*メッセージ、AppleEvent*は返答して、DescTypeはキーである);、悪いパラメタに関して誤りについて説明するテキストを返します。
- PutReplyStringError(const炭*strErr、AppleEvent*は返答する)を欠如させてください;、プログラマによって定義されたエラーメッセージがある誤りを返します。
あなたのアプリケーション MyAppの辞書がa動詞の MyVerbを含むと仮定してください。 MyVerbがエラー番号とエラーメッセージと共にあなたのコードを呼んで、誤りを返すなら、職業スクリプトは以下で トライ…エンドトライ包装紙誤りを扱うかもしれません。 試みてください。 ツ?????MyFunctionにxを設定するエルアプリケーション"MyApp" 誤りs番号nに関して ツ?????sg「(「エラー番号」とn、」、:、「s)、」 終わりは試みます。 |