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