Objective CのUSBデバイスとやりとりするコードを記述しようとしていますが、受信レポートのコールバック関数を設定しようとしました。私の場合はIOKIT関数ですが、私は(明らかに)Objective-CでCのコールバック関数を正しく設定する方法がわからないので、問題はより一般的だと思います。すべての機能はまた、ヘッダファイルで宣言されているC Objective-C(IOKIT)のコールバック
#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
:私は
USBController.m IO機能を処理するクラス「USBController」を持っています。
私はhereとほとんど同じだと思いますが、動作しません。プロジェクトがうまくコンパイルされ、入力があり、コールバック関数が呼び出されるまで、すべてがうまく動作します。次に、「EXC_BAD_ACCESS」エラーが発生します。関数の最初の3つの引数は正しいです。文脈について私はあまり確信していません。 どうしたのですか?
まあ、呼び出されません。ログメッセージはありません。これをどのようにデバッグすればよいですか?ゾンビは私に手がかりを与えません、ゾンビオブジェクトが検出されていません。スタックコンテンツではどうすればよいですか?これは次のように表示されます: #0 \t 0x7fffffe007c5 in __memcpy 存在しないオブジェクトに何かをコピーしようとしているのでしょうか?しかし、どうやって間違っているのか分かりますか? – Emiel
スタックトレースが見える場合は、最後に呼び出された関数は表示されません。あなたが言うことから、私が考えることができるのは、 'レポート'はあらかじめ割り当てられていないということだけですが、それはそうだと言います。とにかく、プログラムが '__memcpy'を呼び出す方法トレース)これはあなたにヒントを与えることができます – sergio
うーん、私はそれを把握することができませんでした。とにかくあなたの努力のおかげで、私はここに完全なコード[リンク](http://forums.macrumors.com/showthread.php?t=1202777)を投稿しました。 – Emiel