从elisp加载动态库

问题描述 投票:0回答:5

我需要使用一些本机代码,我想尝试使用 elisp 作为脚本语言。 是否可以调用动态库(Windows 中的 dll)中实现的本机函数?或者唯一的可能是实现本机代码,用 DEFUN (...) 宏包装它并重新编译 emacs?

emacs elisp
5个回答
12
投票

您无法使用 Emacs Lisp 代码动态加载库。为了解决这个问题,人们通常调用外部程序(进程)并通过向其发送命令并读取其输出来控制它。

您可以查看 slime、tramp、gnuserv、movemail 和其他一些类似的 hack 作为示例。


6
投票

GNU Emacs 23D-BUS 支持。虽然主要是 Unix 的东西,但 D-BUS 在 Windows 上也受支持,并为用户级应用程序提供 IPC 系统。

你也许可以用它构建你想要的东西。


0
投票

此功能仅存在于 SXEmacs 中,不支持 Windows,但在 Unix 中工作正常


0
投票

这可以在终端中使用

emacs
完成,并在 Linux 上使用
IELM REPL
进行窗口化:

启动 repl:

M-x ielm

在 repl 中运行

(load "<path_to_lisp_source>")

现在您应该能够运行任何函数或从此加载的源访问数据。


0
投票

从 Emacs 25.1 开始,现在可以将编译后的代码作为模块加载。有关更多详细信息,请参阅手册中的动态模块编写动态模块部分。

本质上,您需要使用

emacs-module.h
头文件中的一些项目来初始化模块并围绕 C 对象创建合适的包装器,以便 Emacs 理解它们。您可以将此代码编译为要加载的模块的一部分;任何外部函数定义都不能出现在 elisp 代码内部。

© www.soinside.com 2019 - 2024. All rights reserved.