วิธีส่งศูนย์ไปที่ IOKit.IOHIDValueCallback อย่างรวดเร็ว

ฉันเขียนยูทิลิตี้ขนาดเล็กอย่างรวดเร็วซึ่งลงทะเบียนการโทรกลับโดยใช้ IOHIDManagerRegisterInputValueCallback ฉันพยายามที่จะเป็นพลเมืองที่ดีและทำความสะอาดตามตัวฉันเอง

[เอกสารประกอบ] (https://developer.apple.com/library/content/documentation/DeviceDrivers/Conceptual/HID/new_api_10_5/tn2187.html#//apple_ref/doc/uid/TP40000970-CH214-SW61) บอกว่าหากต้องการยกเลิกการลงทะเบียนควรเรียกใช้ฟังก์ชันการลงทะเบียนด้วย Null

หมายเหตุ: หากต้องการยกเลิกการลงทะเบียนให้ส่งค่า NULL สำหรับการโทรกลับ

น่าเสียดาย

IOHIDManagerRegisterInputValueCallback( hidManager, nil , nil);

ไม่รวบรวมคำพูด:

ไม่มีเข้ากันไม่ได้กับประเภทอาร์กิวเมนต์ที่คาดหวัง 'IOHIDValueCallback' (aka '@convention(c) (ไม่บังคับ, Int32, ไม่บังคับ, IOHIDValue) -> ()')

ฉันจะส่ง nil เป็นประเภทที่ถูกต้องได้อย่างไร

นี่คือโค้ดตัวอย่างที่ควรคอมไพล์:

import Foundation
import Carbon
import IOKit
import IOKit.usb
import IOKit.hid
class IOEventManager{
  func start()->Void{
    let hidManager = IOHIDManagerCreate( kCFAllocatorDefault, IOOptionBits(kIOHIDOptionsTypeNone) );
    let context = UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque());
    IOHIDManagerRegisterInputValueCallback( hidManager, nil, context);
  }
}

หากคุณต้องการโปรเจ็กต์เต็ม ให้ชำระเงิน https://github.com/jeantil/autokbisw และดูที่ IOKeyEventMonitor#deinit


person Jean    schedule 25.11.2016    source แหล่งที่มา


คำตอบ (1)


หลังจากนั้นไม่นานฉันก็เปิดโปรเจ็กต์นั้นอีกครั้ง และในขณะที่อ่านลายเซ็นเมธอดอีกครั้ง ฉันสังเกตเห็นว่าลายเซ็นของการผูกแบบรวดเร็วนั้นจริง ๆ แล้วคาดหวัง IOHIDValueCallback? ซึ่งหมายถึง IOHIDValueCallback ที่เป็นทางเลือก

@available(OSX 10.5, *)
public func IOHIDManagerRegisterInputValueCallback(_ manager: IOHIDManager, _ callback: IOKit.IOHIDValueCallback?, _ context: UnsafeMutableRawPointer?)

สิ่งนี้ไม่ชัดเจนสำหรับฉันเพราะคุณสามารถส่งค่า IOHIDValueCallback ได้โดยตรงโดยไม่ต้องตัดคำอย่างชัดเจนเมื่อเรียกใช้เมธอด

การสังเกตสิ่งนี้ทำให้วิธีแก้ปัญหาชัดเจน:

IOHIDManagerRegisterInputValueCallback( hidManager, Optional.none , context);

ขณะนี้โปรแกรมคอมไพล์และดูเหมือนว่าจะทำงานได้อย่างถูกต้อง

person Jean    schedule 25.10.2017