本文目錄一覽:
- 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有的。
原創文章,作者:ABGD,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/141772.html