Lua调用C++类
Lua调用C++主要使用自定义类型userdata。通过创建对象指针与自定义类型关联,并利用元表校验指针以及实现面向对象语法。本文使用了以前编译的Lua静态库
一、Lua访问C++类
1.介绍几个函数:
void *lua_newuserdata (lua_State *L, size_tsize);
int luaL_newmetatable (lua_State *L, constchar *tname);
void luaL_getmetatable (lua_State *L, constchar *tname);
void *luaL_checkudata (lua_State *L, intindex, const char *tname);
lua_newuserdata函数按照指定的大小分配一块内存,将对应的userdata放到栈内,并返回内存块的地址。你可以申请一块内存,也可以只申请指针大小的内存,再将该指针指向另一块区域。lua_newuserdata申请的内存由Lua自己释放
luaL_newmetatable函数创建一个新表(将用作metatable),将新表放到栈顶并建立表和registry中类型名的联系。
luaL_getmetatable函数获取registry中的tname对应的metatable。
luaL_checkudata检查在栈中指定位置的对象是否为带有给定名字的metatable的usertatum。如果对象不存在正确的metatable,返回NULL(或者它不是一个userdata);否则,返回userdata的地址。
2.自定义C++类
1.在vs2012中新建一个项目Studenet,并导入Lua的所有头文件
2.新建Student.h和Student.cpp文件输入:
//
student.h
/
#ifndef __MyCppGame__Student__
#define __MyCppGame__Student__
#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
Student();
~Student();
string getName();
void setName(string name);
private:
string name;
};
#endif/*defined(__MyCppGame__Student__) */
//
student.cpp
/
extern"C"
{
#include "Lua/lua.h"
#include "Lua/lauxlib.h"
#include "Lua/lualib.h"
#include <stdio.h>
}
#include "Student.h"
#pragma comment(lib,"LuaTest.lib")
Student::Student()
{
name =