首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lispworks fli:无法转换为外文类型

lispworks fli:无法转换为外文类型
EN

Stack Overflow用户
提问于 2016-10-09 12:06:19
回答 1查看 67关注 0票数 1

我想在下面的示例A基础上添加一个列表框。使用Win32 API的通用

我添加了一个函数sendmessage,它映射到它的windows计数器部分,并从wndproc调用它。但是它抱怨类型转换错误,如下所示。

代码语言:javascript
复制
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将发送消息定义为(:unsigned :short),但没有用。

代码语言:javascript
复制
(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))))
EN

回答 1

Stack Overflow用户

发布于 2016-10-11 15:16:10

我将sendmessage函数更改如下。而这一次,它没有抱怨。

代码语言:javascript
复制
(fli:define-foreign-function
    (SendMessage "SendMessage" :dbcs)
 ((hwnd hwnd) (msg uint) (wparam ulong) (lparam :pointer)) ;;;(lparam (:unsigned :long)))
    :result-type ulong :calling-convention :stdcall)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39943429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档