Swift 3を使用してCライブラリ用のラッパー/インターフェイスを構築しています。私が呼び出す必要がある関数の1つに、引数としてのコールバック。具体的にはコールバック関数ポインタを引数として持つSwift 3のC API関数の使用
は: - 基本的に私は言ったデータ
機能のルックスで他の操作を行うせた後、機能が正常にそれが、それはその後、与えられた引数のポインタが参照する関数を呼び出しているファイル操作を行っていると述べましたこのように次のよう
HSYNC MXDEF (Syncer)(DWORD h, DWORD t, QWORD p, SYNCPROC *proc, void *user);
コールバック関数型SYNCPROC
が定義される:
typedef void (CALLBACK SYNCPROC)(HSYNC h, DWORD c, DWORD d, void *user);
私は今のところ皆無にコールバック引数を設定するとSyncer
機能を利用することができました。
誰かが示唆したように、私はクラスの外側の関数を作成してみました:
func callbackCalled(handle: HSYNC, channel: DWORD, data: DWORD, user: UnsafeMutableRawPointer) -> Void { print("callback called") }
をそして私も、クラス内でこの方法を試みた:
var callbackTest : @convention(c) (_ handle: HSYNC, _ channel: DWORD, _ data: DWORD, _ user: UnsafeMutableRawPointer) -> Void = { print("\($0) \($1) \($2) \($3)") }
をしかし、私は/読み取りを試してみましたがこのトピックで私はいつもこのエラーメッセージで終わる:
Cannot convert value of type 'Void' (aka '()') to expected argument type '(@convention(c) (HSYNC, DWORD, DWORD, UnsafeMutableRawPointer?) -> Void)!'
私の質問はこのタイプのコールバック関数に関する基準をどのように満たす必要がありますか?
私はこの種のコールバック関数に関する情報を見つけることができませんでした。おそらく、私の知識の欠如と問題の完全な理解のためです。前もって感謝します!
すばらしく素早いヘルプをいただきありがとうございます。私は構文を混乱させました - 今は完全に動作します。 – drummingdemon