如何在C应用程序中实现脚本语言?

16 投票
8 回答
5612 浏览
提问于 2025-04-15 13:03

我有一个C语言的应用程序,想要加入一种脚本语言,这样可以把某些功能放到脚本里去实现。不过我对这方面没有经验,不知道从哪里开始(我还在学习C语言,努力理解这个应用程序)。

那么,怎么把脚本嵌入到我的应用程序里,并且让它们之间能够沟通呢?我想我需要一个脚本语言的解释器,作为一个库文件(在Windows上是.dll文件,或者是可以编译进我应用程序的C源代码)?然后我能不能做一些像下面这样的事情呢:

interpreter->run("myscript", some_object);

那脚本怎么知道对象的属性呢?比如说我的脚本想要读取或修改某个对象的某个字段,比如some_object->some_field?

有没有什么脚本语言特别适合这种嵌入的方式?我知道Lua在游戏开发中很受欢迎,还有像Python、Perl、PHP或Ruby这些语言,它们似乎更像是独立的应用程序,不过我对这些语言的深层架构了解不多,所以不能做太多的猜测 :)(我提到Lua和Python是因为它们是我最喜欢的,但只要能在x86的Windows、Linux和Mac OS X上运行,我也愿意尝试其他容易嵌入到C应用程序中的脚本语言)

8 个回答

18

一些有用的链接:

我对Python很熟悉。Python是一种功能非常强大的语言,拥有大量的可用库。

18

Lua是一种编程语言,它的体积很小,运行速度也很快。我觉得它的接口(API)跟C语言互动起来特别舒服。

如果你想在C语言中使用Lua对象,使用内置的API非常简单。如果你想在Lua中使用C语言的数据,那就稍微复杂一些,通常需要写一些包装方法,把你想让Lua修改的内容暴露出来。

Lua的代码库很小,而且对嵌入式解释器中默认库的数量控制得很紧,这样你可以对安全性有合理的预期。

唯一有点奇怪的是Lua的数组是从1开始编号的,不过这并没有我想象中那么麻烦,因为有迭代器的存在。

如果你想把Lua和C语言结合起来,Lua的发行包里有一个“etc”目录,里面有一些非常实用的示例,可以帮助你快速入门。具体来说,etc/min.c展示了如何启动一个解释器,让它解释一个文件,并调用C语言中的函数(在这个例子中是'print')。从那以后,你可以通过阅读Lua的文档和发行包中包含的标准库源代码来继续学习。

8

这是来自Python官网的文档,内容是关于如何嵌入Python 2.6的...

http://docs.python.org/extending/embedding.html

撰写回答