2016-10-09 11 views
1

サンプルAに基づいてリストボックスを追加しました。 The Common Lisp Cookbook - Using the Win32 APIlispworks fli:外国のタイプに変換することができません

私は関数を追加しました。これは、Windows APIカウンターパートにマップされ、wndprocから呼び出すsendmessageです。 しかし、以下のような型変換エラーが発生しました。

CL-USER 1 > (create-toplevel-window "ppp") 

Error: #<Pointer to type (:UNSIGNED :SHORT) = #x01E902D8> cannot be 
converted to foreign type (:UNSIGNED-INTEGER-TYPE 32). 

エラーに関連する機能は次のとおりです。問題を解決するためのあらゆるアイデア? lparam(:符号なし:短い)とsendmessageを定義しようとしましたが、使用しませんでした。

(fli:define-foreign-function 
    (SendMessage "SendMessage" :dbcs) 
((hwnd hwnd) (msg uint) (wparam ulong) (lparam (:unsigned :long))) 
    :result-type ulong :calling-convention :stdcall) 


(fli:define-foreign-callable 
    (wndproc :result-type :long :calling-convention :stdcall) 
    ((hwnd hwnd) (msg (:unsigned :long)) 
    (wparam (:unsigned :long)) (lparam (:unsigned :long))) 
    (case msg 
    (#.WM_CREATE 
    (fli:with-foreign-string ;; class name pointer 
     (cn-p ec bc :external-format (external-format)) "LISTBOX" 
    (fli:with-foreign-string ;; window name pointer 
     (wn-p ec bc :external-format (external-format)) "" 
     (let ((lstbx (createwindowex hwnd cn-p wn-p 
         (logior ws_visible ws_child lbs_notify) 
       cw_usedefault cw_usedefault cw_usedefault cw_usedefault 
       0 0 200 100))) 
    (fli:with-foreign-string (msg ec bc :external-format (external-format)) "item1" 
       (sendmessage lstbx LB_ADDSTRING 0 msg)))))) 
       ;;0 0 (GetModuleHandle-current 0) 0)))) 

    ;;(createwindowex "listbox4test" hwnd)) 
    ;;(#.WM_PAINT (wndproc-paint hwnd msg wparam lparam)) 
    #+console (#.WM_DESTROY (PostQuitMessage 0) 0) 
    (t (DefWindowProc hwnd msg wparam lparam)))) 
+0

私がsendmessage関数でlparamを:pointer(not:unsinged:long above)として宣言すると、それを共有したいだけで、文句を言わない。 – user1461328

答えて

0

以下のようにsendmessage関数を変更しました。 今回は、不平を言っていませんでした。

(fli:define-foreign-function 
    (SendMessage "SendMessage" :dbcs) 
((hwnd hwnd) (msg uint) (wparam ulong) (lparam :pointer)) ;;;(lparam (:unsigned :long))) 
    :result-type ulong :calling-convention :stdcall) 
関連する問題