CLisp 15:调用操作系统API例如kernel32.dll

前面介绍了如何在LISP中调用C语言编写的函数,而Windows操作系统的DLL也是C/C++语言编写的,其API使用C语言的命名规范,那么用同样的方法也能调用系统API。
新建一个useapi.lisp文件,其内容如下
(defpackage test-api
  (:use common-lisp ffi)
  (:export :cmd-line))
(in-package test-api)
(default-foreign-language :stdc)
(def-call-out cmd-line
  (:name "GetCommandLineA")
  (:return-type c-string)
  (:library "kernel32.dll"))

在LISP执行(load "useapi.lisp")
再执行(test-api:cmd-line)
返回了当前进程的命令行参数 ".\\full\\lisp.exe -M lispinit2.mem -q"

其实,CLisp里面已经封装好了kernel32.dll、user32.dll、advapi32.dll、shell32.dll。
在full模式下可用,例如(win32:GetCommandLineA)和上面例子达到相同的效果,特别注意函数名是区分大小写的,和其它LISP函数不一样。
要想了解有哪些函数可用,可以查看clisp\bindings\win32\win32.lisp文件。

为什么LISP中可以调用C语言写的函数?
其实很简单,就是动态加载DLL技术,再根据函数名获取函数地址,很多地方有介绍。LISP程序本身也是C语

言写的,加载DLL更方便。

更多详细信息请查看 java教程网 http://www.itchm.com/forum-59-1.html

猜你喜欢

转载自zuimeishui.iteye.com/blog/1663086