Swift から C で書いた関数を呼びたいとき
Xcode のメニューから C ファイルをヘッダファイル込みで作ろうとすると Bridging Header を作るか? と聞かれるので、作るを選ぶと、*-Bridging-Header.h という Obj-C の(?)ヘッダファイルができ、作った C ファイルのヘッダファイルが #import されている。
あとはできた C ファイルに適当に書いて C ファイルのヘッダに適当に関数シグネチャを書けば、Swift 側ではプロジェクト内のグローバル関数として使えるようになっている。全部 Unmanaged だけど調べればほぼその通りうごいてくれる。
ただし一部の複雑な struct を書くと Swift のコンパイルで刺さることがある。自分は kinfo_proc を使いたかったんだけど、まんまとこの罠でハマって2時間ぐらい悩んだ。
関連エントリー
- デフォルトブラウザを5秒に1回変える人に便利な Swift スクリプト書いた (Mac) #!/usr/bin/xcrun swift import Cocoa struct ProgramOption { var list : ...
- Swift takeRetainedValue() or takeUnretainedValue takeRetainedValue() → 呼び出した関数内で値が retain されている場合こちらを使う。Swift 側でアンラップする...
- Swift で Mac の ScriptingBridge を無理矢理つかう ちょいちょい「環境設定」→「セキュリティとプライバシー」→「アクセシビリティ」を開かせたいケースがあるが、openURL とかで Secur...
- Zepher のデバイスツリーまわりの実装の覚書 使ったことなかったけど読んでいておもしろかったので要点だけメモ デバイスツリーファイルの仕様 https://www.devicetree....
- SQLite で LOG や SQRT を使うには SQLite にはかなり基本的な算術演算関数しかない。追加で何かしらやるためには拡張 (Run-Time Loadable Extensio...