この機能はMac OS X限定で、PowerMops 5.5以降から利用可能です。
なお、iMopsでは、システムライブラリーの型データをコンパイルしていないので、この方法は利用できません。
syscallを用いて、引数と戻り値を同時に宣言する必要があります。
マッチョコールではなくマークオーコールです(クドいな)。ま、Machのもとの意味はマッハ(音速で有名な物理学者、Ernst Mach)らしいですが。
これはSyscallの擬似拡張です。OS Xでは実行可能コードは、従来からあるPEFではなく、Mach-Oがネイティブになりました。CarbonアプリケーションもOS XだけでいいならMach-Oにするのが基本となっています。CarbonライブラリはOS X上でもPEF形式のものも提供されているのですが、理由はわかりませんが、PowerMopsからリンクできないことがあります(クラッシュする)。疑わしい場合には、このMach-Oコールによって、直接にCarbon.frameworkにリンクすると回避できることがあります。私の具体的経験としては、Quicktime関数がほとんど呼び出せませんでした。
MachOCallで呼び出せる関数の範囲は、Syscallと全く同じです。新しい関数でパラメターデータ自体が組み込まれていないものは、呼び出すことはできません(どうも、現状ではCarbonLib 1.3か1.4辺りまでの関数しか入っていない気がします。)。ですから、真の拡張ではなく擬似拡張ということになります。
形式も、Syscallと全く同じです。呼び出しをコンパイルする前に、
MachOCall aFunctionName
と宣言するだけです。外部関数の呼び出しですから、Case-sensitiveです。関数名は大文字小文字を正しく書き分けてください。MachOCallというワード(語)それ自体には大文字小文字に区別はありません。念のため。
Mach-O フレームワークの方にリンクしたからといって、関数自体が変わる訳ではありません。コード実体はframeworkの方にしかないわけで、CarbonLibにリンクすると、リンクが自動的にそっちに折り返されるというに過ぎません。Mach-Oフレームワークの方にリンクしたら直ったということは、そのリンクの折り返しのところ、つまりOSの方にバグがあるという公算が大きいわけで、しかも、Mach-Oにリンクする時はPEFライブラリ経由で呼んでいて、しかも帰ってくる関数ポインタがCFM形式(transition vector)であることを考えると、CFM supportのフォルダの中にあるPEFファイルのビルドに失敗があって、ファイルが少し壊れているのではないか、と疑っているんですが、そんな単純じゃないんでしょうか。
関連項目:
最終更新:2019年11月24日 14:45