windows下的 lua 與 c 進行交互, 本人新手,只能作到這麼多了windows
c代碼函數
//#include "stdio.h" #include "windows.h" #ifdef _cplusplus extern "C"{ #endif #include "lua.h" #include "lauxlib.h" #include "lualib.h" extern int isquare(lua_State *L); extern int alert(lua_State *L); #ifdef _cplusplus } #endif int luaopen_add(lua_State *L){ lua_register( L, /* Lua 狀態機 */ "square", /*Lua中的函數名 */ isquare /*當前文件中的函數名 */ ); lua_register(L,"alert",alert); // lua_register(L,"cube",icube); return 0; } int alert(lua_State *L) { const char * desc = lua_tostring(L,-1); MessageBox(NULL,desc,"alert",MB_OK); return 1; } int isquare(lua_State *L){ /* C中的函數名 */ float rtrn = lua_tonumber(L, -1); /* 從Lua虛擬機裏取出一個變量,這個變量是number類型的 */ //printf("Top of square(), nbr=%f\n",rtrn); lua_pushnumber(L,rtrn*rtrn); /* 將返回值壓回Lua虛擬機的棧中 */ return 1; /* 這個返回值告訴lua虛擬機,咱們往棧裏放入了多少個返回值 */ }
編譯命令lua
cl /c add.c /I ../include
include 爲 lua 頭文件所在目錄spa
link /def:export.def /dll add.obj ../lua53.lib "kernel32.lib" "user32.lib" "gdi32.lib"
導出函數到 dllcode
export.defip
; export.def LIBRARY ADD ; MY_DLLMAIN 將成爲生成的dll的名稱 DESCRIPTION 'test' EXPORTS isquare @ 1 alert @ 2 ; 這個名稱即爲函數的實際導出名稱 @1爲函數的導出編號
lua虛擬機
square = package.loadlib("ADD.dll", "isquare") alert=package.loadlib("ADD.dll", "alert") print(alert) print ( square(2) ) alert("222")
執行結果string
雖然有亂碼存在問題,可是指望結果基本已經達到io