我想创建一个对应于 C 中的宏的 lisp 函数。 例如,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)
最佳答案
您不能直接这样做。 C 预处理器宏不会在编译过程中保留,即在生成的目标文件中根本没有工件,这将对应于 C 宏本身(尽管它的扩展可能多次成为目标文件的一部分)。由于没有工件,因此无需与 FFI 绑定(bind)。
但是,您可以提供包装器函数
#define HIGHWORD(x) /* whatever */
int
highword_wrapper(int x)
{
return HIGHWORD(x);
}
并且这个可以与 FFI 一起使用。
关于lisp - 如何创建对应于 C 宏的 Lisp FLI 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40068960/