在obj-c对象而不是C结构上调用IOUSBDeviceInterface函数

时间:2012-07-11 02:29:00

标签: objective-c c usb iokit

假设我要关闭USB设备。这是一个代表USB设备的C结构:

struct __USBDevice {

uint16_t idProduct;
io_service_t usbService;
IOUSBDeviceInterface **deviceHandle;
IOUSBInterfaceInterface **interfaceHandle;
Boolean open;

};

typedef struct __USBDevice *USBDeviceRef;

以下是关闭设备的代码:

// device is a USBDeviceRef structure
// USBDeviceClose is a function member of IOUSBDeviceInterface C Pseudoclass

(*device->deviceHandle)->USBDeviceClose(device->deviceHandle);

现在假设设备属性是在obj-c类中声明的

@interface Device : NSObject {

NSNumber idProduct
io_service_t usbService;
IOUSBDeviceInterface **deviceHandle;
IOUSBInterfaceInterface **interfaceHandle;
BOOL open;
}

@end

如何调用USBDeviceClose()?

2 个答案:

答案 0 :(得分:1)

有两种方法。您可以将类建模为类似于结构,并在声明上方添加@public(这样语法不会更改),或者您可以向接口添加Close方法,这样做也会内部逻辑(但当然不需要取消引用device。)

答案 1 :(得分:0)

无需多余。 Ivars可以是结构。

@interface Device : NSObject {

USBDeviceRef deviceRef;
}

@end

#implementation Device

- (void) close {
USBDeviceClose(deviceRef->deviceHandle);
}