2012-01-15 31 views
2

我正在开发一个C++应用程序,需要与多个平台兼容(Windows/Linux),并且希望授予用户扩展软件的能力,以准确地满足他们的需求,而不允许他们改变关键部分应用程序(所以我不希望他们在C++代码中)。使用嵌入式脚本扩展C++应用程序

我在寻找的是嵌入脚本语言(我宁愿Python,因为我已经熟悉它,但它不是强制性的),所以放入某个插件文件夹的脚本可以操纵应用程序的对象,如果我想这些对象是可修改的。

最简单的例子:如果有人想为我的应用程序构建自己的用户界面,他们应该可以用这样的脚本来做到这一点。

但问题是,我从来没有把C++和任何类型的外部脚本放在一起,所以我真的不知道如何开始。在寻找材料开始之后,我发现Lua声称是一种很好的语言来做到这一点,但我找不到好的初学者教程。

我真的很感激,如果有人知道一个好地方开始,无论是在线资源,还是一本好书。我不介意在一本好书上花几块钱。

作为一名学习者,我倾向于从示例代码和解释这些代码的几行文字混合学习。

+0

@Hsesein感谢您的信息。固定。 – nijansen 2012-01-15 19:48:21

+0

您可能对[使用V8嵌入JavaScript指南]感兴趣(http://code.google.com/apis/v8/embed.html)。 – jterrace 2012-01-15 19:51:26

回答

0

对于Python,我猜是boost库是为了做到这一点。至于Lua,我自己并没有使用过它,但是Google的一次快速搜索首先让我跳到了debian admin,然后跳到了Lua's C interface。你看过那些吗?

+0

Lua有Luabind,它有Boost Python的基础,工作方式非常类似(很好)。 – 2012-01-15 20:10:56

+0

非常感谢你!我之前没有使用Lua,并对我将如何开始感兴趣。 – guinny 2012-01-15 20:13:04

1

文章here at linux journal是开始如何在您的c/C++代码中嵌入python解释器的好地方。然而,这只是战斗的一半,因为当解释器被嵌入时,你需要将你软件的一部分发布到脚本环境中。这样做的基本API是用C编写的,如果你的大部分代码是C++,最好使用boost :: python,因为在C++类中编写C包装可能会很麻烦。您也可以使用Py ++来生成boost :: python绑定。

如果您只想使用脚本作为自定义门,并且可以使用python的内存占用空间,那么它可能是比Lua更好的选择。 Lua通常适合像游戏开发这样的小环境。还有更多的python开发人员比lua开发人员以及更多的内置插件和第三方库可用。

3

如果你想使用Python,我肯定会建议使用Boost.Python。这是一个设计得非常好的图书馆。只是一个例子:所有你需要做的,露出一个C++类Python是这样的:

struct World 
{ 
    void set(std::string msg) { this->msg = msg; } 
    std::string greet() { return msg; } 
    std::string msg; 
}; 

BOOST_PYTHON_MODULE(hello) 
{ 
    class_<World>("World") 
     .def("greet", &World::greet) 
     .def("set", &World::set) 
    ; 
} 

它可以处理几乎是自动的一切:类型之间的转换,例外,它甚至允许你使用两者之间的引用计数的对象使用boost::shared_ptr的语言。

+0

这听起来不错,Boost文档看起来也很好。今晚晚些时候我会深入研究它。谢谢。 – nijansen 2012-01-15 20:17:59

+0

如果您在Windows上使用Visual Studio,安装库会变得更容易,只需使用BoostPro的安装程序即可:http://www.boostpro.com/download/ – 2012-01-15 20:21:49

+0

不幸的是,我正在开发此项目Debian,使用gcc 4.4.5,但感谢提示。 – nijansen 2012-01-15 20:47:18