Hi all,

I have a C struct as follows:

(defcstruct MyPrivateData
  (notification       io_object_t)
  (deviceInterface    :pointer) ;; void pointer 
  (deviceName         CFStringRef)
  (locationID         UInt32))

of which the deviceInterface slot is the one I'm interested in. I need to pass 
the address of the deviceInterface pointer to a function that sets the pointer 
to valid device interface struct.

So...

In the sample code from Apple the C function is called like this:

typedef struct MyPrivateData {
    io_object_t            notification;
    IOUSBDeviceInterface   **deviceInterface;
    CFStringRef            deviceName;
    UInt32                 locationID;
} MyPrivateData;

IOCFPlugInInterface     **plugInInterface = NULL;
SInt32                  score;
HRESULT                 res;

res = (*plugInInterface)->QueryInterface( plugInInterface, 
                                          CFUUIDGetUUIDBytes( 
kIOUSBDeviceInterfaceID ),
                                          (LPVOID*) 
&privateDataRef->deviceInterface );

How would I translate this call into a valid CFFI equivalent ?

I have so far:

(let ((query-interface-ptr
         (foreign-slot-value plugInInterface
                             'IOCFPlugInInterface
                             'ccag.osx.iokit::QueryInterface)))

   (format *debug-io* "~%DEVICE-ADDED: query-interface-ptr = ~s."
           query-interface-ptr)
                
   (setq res (foreign-funcall-pointer
                query-interface-ptr
                ()
                :pointer plugInInterface
                CFUUIDBytes (cf-uuid-get-uuid-bytes
                               kIOUSBDeviceInterfaceID)
                :pointer (foreign-slot-pointer privateDataRef
                                               'MyPrivateData
                                               'deviceInterface)))

   (format *debug-io* "~%DEVICE-ADDED: deviceInterface = ~s."
           (foreign-slot-value privateDataRef 'MyPrivateData 'deviceInterface))

...

This code "crashes" with signal 100 as reported by AllegroCL in the call to 
foreign-funcall-pointer ...

Any hints or advice really appreciated!

TIA!

Best wishes
  Frank


_______________________________________________
cffi-devel mailing list
cffi-devel@common-lisp.net
http://lists.common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel

Reply via email to