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
ポインターを渡すさまざまな方法を模倣しようとして、多くの場所を調べました。正しい方法は 1 つだけです。:)
テーマの別のバリエーション: (__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 の更新