我正在尝试在 Objective C 中编写一些与 USB 设备交互的代码,但我一直在为传入报告设置回调函数。就我而言,它是一个 IOKIT 函数,但我认为这个问题更普遍,因为我(显然)不知道如何在 Objective-C 中正确设置 C 回调函数。我有一个处理 io 函数的“USBController”类
USB控制器.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”错误。函数的前三个参数是正确的。我不太确定上下文..我做错了什么?