本文目录一览:
- 1、LUA怎么像C语言一样编译生成可执行文件
- 2、如何在Lua与C/C++之间实现table数据的交换
- 3、c语言中怎么给lua分配缓冲区
- 4、Linux中如何在C语言中嵌入Lua
- 5、有C语言转换为lua语言转换器
LUA怎么像C语言一样编译生成可执行文件
下载源代码,解压。
解压后,包含文件:
1、doc 文件夹,lua的更新说明,网页格式
2、src 文件夹,lua的源文件,C语言实现
3、Makefile , 编译用配置文件,我们这里就不用它了
4、README , 不用我说了吧,就一说明文件,我们也用不着
进入src文件夹,新建一个文本文件。并改名为vslua.bat,提示是否更改后缀名,选择是并点击。
右键我们建立的vslua.bat文件,以记事本打开
编写如图代码,为了锻炼大家的动手能力,加深理解,我就直接上图不打文字。反正一定能看清的。记得编写后保存哦!
到开始菜单选择vs的开发人员命令提示工具。
在命令工具中输入:
1、“cd x:\你的src文件夹路径\src”[不包含引号],回车
2、“vslua.bat” 回车
等待执行结束。如果不错的话,你到src上级目录就能发现新生成了一个bin文件夹。文件夹里面放的就是生成好的exe、lib、dll。
最后测试一下新生成的lua.exe。
如何在Lua与C/C++之间实现table数据的交换
你说的应该是用c语言往lua里传递一组table数据吧
LUA的 C库有提供相关的接口 实现这个操作
不过接口并不是直接使用的 你需要对lua与c交互有足够的理解 自己去构造一个方法
相关的实现 你可以搜一下 应该有很多现成的代码
不过不推荐使用这种方法去操作数据 因为table表的结构多变 你很难构造一个通用的方法去完成多种table表的数据传递 那会导致这样一种情况 基本上每个table表的传递 你都要重新构造一个c的方法 这种工作量算下来不划算
更合理的方式是 对于table表里对应的c中的数据 你给出lua中可以访问的接口 在lua中构造这个table表 这样操作更灵活
至于把luatable数据传递给c 需要说明的是 c中并不存在table这种数据结构 如果你要这么做
你需要在c端自己构造一个方法去解析table 这里也不推荐这么做 理由同上 更好的方法是把table表中的元素拆解出来 需要传递的元素在c端做一个接口
c语言中怎么给lua分配缓冲区
将数据以链表形式顺序存放,新数据总是放在表尾,待处理的数据总是在头结点下的第一个结点,处理完毕则释放空间。
#define BufferSize 1024 // 合适的大小你知道的
typedef struct node {
char *buffer;
struct node *next;
}*linkList;
LinkList *InitList() {
LinkList *head;
head = (char *)malloc(size(node));
head-next = NULL:
return head;
}
void AddData(LinkList *head, char *data) { // 将新数据添加到表尾
LinkList *p = head;
LinkList *anode = (char *)malloc(size(node));
anode-buffer = (char *)malloc(size(BufferSize));
strncpy(anode-buffer,data,BufferSize);
anode-next = NULL:
while(p-next) p = p-next;
p-next = anode;
}
void DealData(LinkList *head) {
LinkList *p = head-next;
if(p) {
head-next = p-next;
// p-buffer指向的数据待处理
free(p-buffer); // 处理完毕,释放空间
free(p);
}
}
Linux中如何在C语言中嵌入Lua
#include stdio.h#include lua.h#include lualib.h#include lauxlib.h int echohello(){ printf("hello"); //return 1; return 0;} int main(){ lua_State* ls = luaL_newstate(); luaL_openlibs(ls); lua_pushcclosure(ls, echohello, 0); lua_setglobal(ls, "echohello"); luaL_dostring(ls, "print('start call c function...')\r\n" "echohello()\r\n" "print('')" "print('end call c function...')\r\n" ); lua_close(ls); return 0;}
我假设你知道如何设置lua编译环境,如何链接lua库
我假设你使用的是c语言,并且知道函数调用的内部原理(不知道的话请不要像我这样把echohello给pushcclosure进去)
gcc下是一样的。
有C语言转换为lua语言转换器
= =Lua本身就是C写的,所以你可以看看Lua官方的源码,就可以转换
至于这种转换器没有的。
但是呢,Lua转EXE有的。