Objective C で USB デバイスとやり取りするコードを書き込もうとしていますが、着信レポートのコールバック関数の設定に行き詰まりました。私の場合、それは IOKIT 関数ですが、Objective-C で C コールバック関数を正しく設定する方法が (明らかに) わからないため、問題はより一般的だと思います。io関数を処理するクラス「USBController」があります
USBController.m:
#include <CoreFoundation/CoreFoundation.h>
#include <Carbon/Carbon.h>
#include <IOKit/hid/IOHIDLib.h>
#import "USBController.h"
static void Handle_IOHIDDeviceIOHIDReportCallback(
void * inContext, // context from IOHIDDeviceRegisterInputReportCallback
IOReturn inResult, // completion result for the input report operation
void * inSender, // IOHIDDeviceRef of the device this report is from
IOHIDReportType inType, // the report type
uint32_t inReportID, // the report ID
uint8_t * inReport, // pointer to the report data
CFIndex InReportLength) // the actual size of the input report
{
printf("hello"); //just to see if the function is called
}
@implementation USBController
- (void)ConnectToDevice {
...
IOHIDDeviceRegisterInputReportCallback(tIOHIDDeviceRefs[0], report, reportSize,
Handle_IOHIDDeviceIOHIDReportCallback,(void*)self);
...
}
...
@end
すべての関数もヘッダー ファイルで宣言されます。
ここで見つけたものとほとんど同じことをしたと思いますが、うまくいきません。プロジェクトは適切にコンパイルされ、入力があり、コールバック関数が呼び出される瞬間まですべてが機能します。次に、「EXC_BAD_ACCESS」エラーが発生します。関数の最初の 3 つの引数は正しいです。コンテキストについてはよくわかりません..何が間違っていましたか?