c++ 注册类到 lua
test.h:
#ifndef __TEST_H__
#define __TEST_H__ class CTest
{
public:
CTest();
~CTest(); int getA();
void setA(int a); private:
int m_a;
}; #endif
test.cpp:
#include "test.h" CTest::CTest()
{
m_a = ;
} CTest::~CTest()
{
} int CTest::getA()
{
return m_a;
} void CTest::setA(int a)
{
m_a = a;
}
main.cpp:
#include "test.h" extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include "luaconf.h"
}; static int CreateTest(lua_State* L)
{
CTest** ppTest = (CTest**)lua_newuserdata(L, sizeof(CTest*));
*ppTest = new CTest;
luaL_getmetatable(L, "test");
lua_setmetatable(L, -);
return ;
} static int TestGetA(lua_State* L)
{
CTest** ppTest = (CTest**)luaL_checkudata(L, , "test");
luaL_argcheck(L, ppTest != NULL, , "invalid user data");
lua_pushnumber(L, (int)(*ppTest)->getA());
return ;
} static int TestSetA(lua_State* L)
{
CTest** ppTest = (CTest**)luaL_checkudata(L, , "test");
luaL_argcheck(L, ppTest != NULL, , "invalid user data");
int a = (int)lua_tointeger(L, );
(*ppTest)->setA(a);
return ;
} static int DeleteTest(lua_State* L)
{
CTest** ppTest = (CTest**)luaL_checkudata(L, , "test");
delete *ppTest;
printf("test is deleted");
return ;
} static const struct luaL_Reg test_reg_f[] =
{
{"test", CreateTest},
{NULL, NULL},
}; static const struct luaL_Reg test_reg_mf[] =
{
{"TestGetA", TestGetA},
{"TestSetA", TestSetA},
{"__gc", DeleteTest},
{NULL, NULL},
}; static int testModelOpen(lua_State* L)
{
luaL_newlib(L, test_reg_f);
return ;
} int main()
{
int top = ;
lua_State* L = luaL_newstate();
top = lua_gettop(L);
luaopen_base(L);
luaL_openlibs(L);
top = lua_gettop(L); //加载模块
luaL_requiref(L, "testModel", testModelOpen, );
top = lua_gettop(L); //创建metatable
luaL_newmetatable(L, "test");
lua_pushvalue(L, -);
lua_setfield(L, -, "__index");
luaL_setfuncs(L, test_reg_mf, );
lua_pop(L, );
top = lua_gettop(L); int ret = luaL_dofile(L, "test.lua");
if(ret != )
{
printf("%s", lua_tostring(L, -));
}
lua_close(L); getchar();
return ;
}
test.lua:
local testModel = require("testModel");
local test1 = testModel.test();
test1:TestSetA();
print('value is : ' .. test1:TestGetA());
c++ 注册类到 lua的更多相关文章
- C#下没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
C#下没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) 原因:没有原生支持64位,而是以32位兼容方式运行 解决办法:在项目属性里设置“生成” ...
- 检索 COM 类工厂中 CLSID 为 {820280E0-8ADA-4582-A1D9-960A83CE8BB5} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。
检索 COM 类工厂中 CLSID 为 {820280E0-8ADA-4582-A1D9-960A83CE8BB5} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRE ...
- Chrome 没有注册类
妈蛋这个问题折腾了好久,百度都是噼里啪啦什么什么进入注册表什么的删除啊 操 看着难受死了 这边也有这个些 没有注册类原因什么的的百度一下就有了 解决办法 管理员身份运行CMD 输入 REG DELE ...
- 原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
场景: 客户端初始化正常,到IIS服务就报80040154. System.Web.Services.Protocols.SoapException: System.Web.Services.Prot ...
- Win8 x64环境下VS2010 C#工程运行报错:没有注册类 (异常来自 HRESULT:0x80040154
来源:http://blog.sina.com.cn/s/blog_7095482001019c2v.html 问题描述: 在Win8 x64环境下,VS2010的C#工程中引用了COM组件(Acti ...
- 解决win8下chrome浏览器打开提示没有注册类的方法
今天又把win8装回来了,继续装了个chrome浏览器,但是发现只能从安装的文件打开,从快捷方式或者快速启动栏都会提示没有注册类.找到一种解决的办法是删除注册表中的相关键值,具体如下: 1.打开注册表 ...
- cocos2dx3.0rc导出自定义类到lua的方法
以前要导出c++类到lua,就得手动维护pkg文件,那简直就是噩梦,3.0以后就会感觉生活很轻松了. 转载请注明出处http://www.cnblogs.com/mrblue/p/3637910.ht ...
- 预览Cube出现没有注册类错误
用Microsoft SQL Server Management Studio预览AS上的Cube 出现如下错误. TITLE: Microsoft SQL Server Management Stu ...
- win7系统cocos2dx 3.4 绑定自定义类到Lua
Cocos2d-x 3.0开始使用bindings-generator来生成c++类的lua绑定.bindings-generator基于tolua++,通过配置tools/tolua中的ini文件以 ...
随机推荐
- reset 单个文件 回退
git将单个文件恢复到历史版本的正确方法如下: git reset commit_id 文件路径 git checkout -- 文件路径
- H5+微信支付报-1问题
1.检查发起支付的参数,全部设置为小写: WxPayData jsApiParam = new WxPayData(); jsApiParam.SetValue("appid", ...
- nginx tomcat 动静分离
所谓动静分离就是通过nginx(或apache等)来处理用户端请求的图片.html等静态的文件,tomcat(或weblogic)处理jsp.do等动态文件</span>,从而达到动静页面 ...
- HTML与CSS
HTML中DTD是什么?是一套关于标记符的语法规则.DTD是一种保证html格式正确最有效的方法.一个DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则. ...
- hive --service metastore 出现的问题
Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083 执行命令jps root@hadoopm:/usr# jps1763 Res ...
- VS2013自带的Browser Link功能引发浏览localhost网站时不停的轮询
浏览localhost网站时候不管你打开那个页面它都会不停的轮询.据悉这是VS2013自带的Browser Link功能,里面用到SignalR机制 什么是Browser Link功能,什么是Sign ...
- 更改ubuntu多系统启动顺序
电脑上双系统,启动时界面如下 ubuntu advance ubuntu option windows 在/boot/grub/grub.cfg中,查看到可以简单的修改/etc/defaulg/gru ...
- Python学习笔记 for windows 二
函数 abs(-20) //结果为:20,绝对值函数 def 函数名称([参数1,参数2,参数3]): 执行语句 retu ...
- margin重叠现象与margin auto自适应居中
上下相邻的(算一种兄弟关系)普通元素,上下边距并非简单的相加,而是取其中最大的边距值:而浮动的盒子边距是相加的:父子div也会发生重叠,并不是bug: <style>#test1{ wid ...
- [原]简易android反编译教程
1.apktool d -f <.apk> <output> 反编译出资源文件(及smali)2.使用winrar打开apk,提取出classed.dex,执行 d2j-dex ...