2

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 つの引数は正しいです。コンテキストについてはよくわかりません..何が間違っていましたか?

4

2 に答える 2