如何创建与C宏对应的Lisp FLI函数
发布时间:2020-12-16 10:37:04 所属栏目:百科 来源:网络整理
导读:我想创建一个lisp函数,它对应于C中的宏. 例如,win32 API中有一个HIWORD,它被定义为头文件中的一个宏. 我尝试将其定义如下,但被告知HIWORD尚未解决. CL-USER 4 (hiword #xFFFFFFFF)Error: Foreign function HIWORD trying to call to unresolved external fun
我想创建一个lisp函数,它对应于C中的宏.
例如,win32 API中有一个HIWORD,它被定义为头文件中的一个宏. 我尝试将其定义如下,但被告知HIWORD尚未解决. CL-USER 4 > (hiword #xFFFFFFFF) Error: Foreign function HIWORD trying to call to unresolved external function "HIWORDW". 我只是想知道如何为C函数创建C宏的包装器. (fli:define-c-typedef DWORD (:unsigned :long)) (fli:define-c-typedef WORD (:unsigned :short)) (fli:define-foreign-function (HIWORD "HIWORD" :dbcs) ((dwVal dword)) :result-type word :calling-convention :stdcall) 解决方法
无需跳入另一种语言.在Lisp中移位和屏蔽:
(defun hiword (val) (logand (ash val -16) #xFFFF) (defun loword (val) ;; ditto (logand val #xFFFF)) 另一种方法:使用带有使用字节语法表示的范围的ldb访问器: (defun hiword (val) (ldb (byte 16 16) val) ;; get 16-bit-wide "byte" starting at bit 16. (defun loword (val) (ldb (byte 16 0) val) ;; get 16-bit-wide "byte" at position 0. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- cocos2dx 3.x 屏幕触摸事件的认识
- 在cocos2d-js 中 手动播放cocos builder 编辑的动画
- 正则表达式
- c# – 如何从给定的MDX查询中获取多维数据集名称
- 【Ajax】XMLHttpRequest介绍以及在前端如何实现Ajax
- 前端用AJAX把数组传给后端控制器数组参数的方法
- objective-c – 是否可以在NSPredicate中使用嵌套的SUBQUER
- 在Objective-C中使用类扩展用于选择性可见性
- ruby-on-rails – Rails has_many通过使用source和source_t
- react-native – 在React Native Android应用程序中创建Web
推荐文章
站长推荐
热点阅读