Lisp HUG Maillist Archive

problems getting objective-C pointer values in lisp

I am having problems getting objective-C pointer values in lisp.
In the example below, I trying to access a boolean value using the  
new Tiger QTKit (quicktime kit).
I choose a call that would return a boolean value . However, calls to  
invoke and invoke-bool give me both pointers. They return the same  
pointer and I imagine this is good. I have tried fli:deference  
without success.

Any pointers (no pun intended) to some solution?

Thanks

Bruno

#|
QTMovieHasDurationAttribute
The duration setting; the value for this key is of type NSNumber,  
interpreted as a BOOL. This value is YES if the movie has a duration.  
(Some types of movies, for instance QuickTime VR movies, have no  
duration.)

CL-USER 62 > (qtmovie-has-duration? (choose-qtmovie-file))
qt-movie pointer      #<Pointer: OBJC:OBJC-OBJECT-POINTER = #x07BFF7F0>
qt-movie from pointer #<QT-MOVIE 100D14EB>
invoke-bool           #<Pointer: OBJC:OBJC-OBJECT-POINTER = #xA0727964>
invoke                #<Pointer: OBJC:OBJC-OBJECT-POINTER = #xA0727964>
object from pointer   NIL
pointer type          :VOID
dereference           #<Pointer to type :VOID = #x00300B10>


|#

(objc:ensure-objc-initialized
:modules
'("/System/Library/Frameworks/Foundation.framework/Versions/C/ 
Foundation"
    "/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa"
    "/System/Library/Frameworks/QuickTime.framework/Versions/A/ 
QuickTime"
    "/System/Library/Frameworks/QTKit.framework/Versions/A/QTKit"))


(objc:define-objc-class qt-movie ()
   ()
   (:objc-class-name "My-QTMovie")
   (:objc-superclass-name "QTMovie"))

(defmethod init-qtmovie-with-file ((qt-movie qt-movie) file-pathname)
   (let ((url (objc:invoke "NSURL" "fileURLWithPath:"
                           (namestring file-pathname))))
     (objc:invoke (objc:invoke "My-QTMovie" "alloc")
                                                                
"initWithURL:error:" url nil)
     qt-movie))


(defun choose-qtmovie-file (&optional (default-directory #P"~/Movies/"))
   (when-let (file-pathaname (capi:prompt-for-file
                              "QuicktTime file"
                              :pathname default-directory
                              :filters '("mov" "*.mov" "mid" "*.mid"  
"mp4" "*.mp4")))
     (init-qtmovie-with-file (make-instance 'qt-movie) file-pathaname)))

(defmethod qtmovie-has-duration? ((qt-movie qt-movie))

    (format t "qt-movie pointer      ~S~%"
            (objc:objc-object-pointer qt-movie))
    (format t "qt-movie from pointer ~S~%"
            (objc:objc-object-from-pointer (objc:objc-object-pointer  
qt-movie)))
    (format t "invoke-bool           ~S~%"
            (objc:invoke-bool (objc:objc-object-pointer qt-movie)  
"attributeForKey:" "QTMovieHasDurationAttribute"))
    (format t "invoke                ~S~%"
            (objc:invoke (objc:objc-object-pointer qt-movie)  
"attributeForKey:" "QTMovieHasDurationAttribute"))
    (format t "object from pointer   ~S~%"
            (objc:objc-object-from-pointer (objc:invoke (objc:objc- 
object-pointer qt-movie) "attributeForKey:"  
"QTMovieHasDurationAttribute")))
    (format t "pointer type          ~S~%"
            (fli:pointer-element-type (objc:invoke (objc:objc-object- 
pointer qt-movie) "attributeForKey:" "QTMovieHasDurationAttribute")))
    (format t "dereference           ~S~%"
            (fli:dereference (objc:invoke (objc:objc-object-pointer  
qt-movie) "attributeForKey:" "QTMovieHasDurationAttribute")
                             :type '(:pointer :void) :copy-foreign- 
object nil))
    )




Re: problems getting objective-C pointer values in lisp

Unable to parse email body. Email id is 3971

Updated at: 2020-12-10 08:52 UTC