当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何将脚本语言实现到C应用程序中?》经验,为你挑选了4个好方法。

我有一个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应用程序中)



1> Andrew Y..:

Lua中.它占地面积非常小,速度相当快,我发现它(主观上)拥有最令人愉快的API与C交互.

如果你想从C触摸Lua对象 - 使用内置的API非常容易.如果你想从Lua触摸C数据 - 这需要更多的工作,通常你需要制作包装器方法来公开你想让Lua修改的内容.

小代码库和对嵌入式解释器中引入的默认库数量的严格控制也意味着您可以对安全性做出合理的假设.

唯一奇怪的部分是基于1的数组编号,但是,考虑到迭代器的存在,它与我的想法相比并不是那么大.

如何与C集成:Lua的分发tarball有一个目录"etc",其中包含一些非常有用的示例,应该可以让您快速入门.具体来说 - etc/min.c显示了如何启动解释器,使其解释文件,并使其调用C函数(在这种情况下为'print').从那里开始,您可以阅读Lua文档以及分发中包含的标准库的来源.



2> codeape..:

一些有用的链接:

嵌入Python

嵌入的Lua:http://www.lua.org/manual/5.1/manual.html#3,http://www.ibm.com/developerworks/opensource/library/l-embed-lua/index.html

嵌入Ruby

嵌入PLT计划

嵌入PERL

嵌入TCL

嵌入JavaScript

嵌入PHP

我熟悉Python.Python是一种非常丰富的语言,并且拥有大量可用的库.



3> Norman Ramse..:

Lua完全针对这种嵌入进行了优化.一个很好的出发点是Roberto Ierusalimschy的书" 在Lua编程" ; 你可以在线免费获得上一版.

您的脚本如何了解C对象的属性?

想象一下你的对象定义如下:

typedef struct my_object *Object;
Object some_object;

您的C代码了解该对象的属性是什么?几乎没有,那是什么.你所能做的就是

传递指向对象的指针,将它们放在数据结构中等.

调用实际知道内部内容的函数struct my_object.

Lua以完全相同的方式访问C对象:间接通过函数:

您进行API调用以将指针放在Lua的堆栈上,从中可以进入Lua数据结构,变量或Lua Universe中的任何其他位置.

您可以定义了解对象内部的函数,然后将这些函数导出到Lua.

"辅助库"中有很多东西可以帮助你.别忽略它!

所有这一切都在罗伯托的书的第三部分中以清晰的方式解释,其中包括例子.一个好点是

您可以选择自己分配内存("轻用户数据")或让Lua分配内存.通常Lua分配内存通常会更好,因为它可以在不再需要时自动释放对象,并且还可以关联Lua metatable,它允许您(以及其他技巧)允许对象参与标准Lua操作比如查找字段,而不仅仅是函数调用.

最后要注意的:althought有可能使用痛饮或toLua或其他工具来尝试生成代码连接C和Lua的,我希望你自己写的代码,由专人.它实际上很容易,而且它是了解真实情况的唯一方法.



4> Anon..:

这是Python网站上嵌入Python 2.6的文档...

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


我发现与Python的集成非常简单,FWIW.我能够在半天内构建一些有用的功能(包括在我的C代码中调用自定义例程).
我在C语言中嵌入脚本语言的经验只包括Perl,Python,Lua和Tcl.在学习曲线方面(从头开始到有工作程序的时间),我会给Lua一个,Tcl一个2,Python一个5,Perl一个359,000.但是之后,我在使用Python之后使用了Lua和Tcl,而我只学习了Perl的Python嵌入,所以我的经验可能使Lua和Tcl看起来都比它们容易.但我同意Joe的观点 - 大约需要半天时间用Python来解决这个问题,大约需要20分钟来计算Lua.Lua非常容易嵌入.
我接受了以上所有"使用Lua!" 答案是因为我可以一石二鸟(我想学习Python),因为它确实有用.亲爱的匿名读者来自谷歌的这个问题:阅读所有其他答案,他们都很优秀.
推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有