我正在从 USB 打印机进行异步读取。读取工作正常。我的麻烦是从回调中更新 NSTextField 。
-(IBAction)printTest:(id)sender
{
// Setup... then:
NSLog(@"starting async read: %@", _printerOutput);
NSLog(@"_printerOutput pointer = %p", _printerOutput);
result = (*interface)->ReadPipeAsyncTO(interface,
1,
readBuffer,
numBytesRead,
500,
1000,
USBDeviceReadCompletionCallback,
&(_printerOutput)
);
回调定义为:
void USBDeviceReadCompletionCallback(void *refCon, IOReturn result, void *messageArg)
{
NSTextField *printerOutput = (__bridge NSTextField *) messageArg;
NSLog(@"_printerOutput pointer = %p", printerOutput);
}
指针在回调内部时会丢失其值。
starting async read: <NSTextField: 0x10221dc60>
_printerOutput pointer = 0x10221dc60
_printerOutput pointer = 0x0
我在很多地方都试图模仿不同的方式来传递指针。只有一种正确的方法。:)
主题的另一个变体:(__bridge void *)(_printerOutput)。这也行不通。
我知道回调是 IOAsyncCallback1 类型的。
其他值得注意的 URL: http ://www.google.com/search?client=safari&rls=en&q=another+usb+notification+example&ie=UTF-8&oe=UTF-8并 从线程中的 C 函数更新 UI