首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

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

2012-09-22 
CLisp 15:调用操作系统API例如kernel32.dll前面介绍了如何在LISP中调用C语言编写的函数,而Windows操作系统

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更方便。

 

 

热点排行