windows下的 lua 与 c 进行交互, 本人新手,只能做到这么多了
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虚拟机,我们往栈里放入了多少个返回值 */
}
编译命令
cl /c add.c /I ../include
include 为 lua 头文件所在目录
link /def:export.def /dll add.obj ../lua53.lib "kernel32.lib" "user32.lib" "gdi32.lib"
导出函数到 dll
export.def
; 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")
执行结果
虽然有乱码存在问题,但是期望结果基本已经达到
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。