0

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 の更新

4

1 に答える 1