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的更多相关文章

  1. C#下没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))

    C#下没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) 原因:没有原生支持64位,而是以32位兼容方式运行 解决办法:在项目属性里设置“生成” ...

  2. 检索 COM 类工厂中 CLSID 为 {820280E0-8ADA-4582-A1D9-960A83CE8BB5} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。

    检索 COM 类工厂中 CLSID 为 {820280E0-8ADA-4582-A1D9-960A83CE8BB5} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRE ...

  3. Chrome 没有注册类

    妈蛋这个问题折腾了好久,百度都是噼里啪啦什么什么进入注册表什么的删除啊 操  看着难受死了 这边也有这个些 没有注册类原因什么的的百度一下就有了 解决办法 管理员身份运行CMD 输入 REG DELE ...

  4. 原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))

    场景: 客户端初始化正常,到IIS服务就报80040154. System.Web.Services.Protocols.SoapException: System.Web.Services.Prot ...

  5. Win8 x64环境下VS2010 C#工程运行报错:没有注册类 (异常来自 HRESULT:0x80040154

    来源:http://blog.sina.com.cn/s/blog_7095482001019c2v.html 问题描述: 在Win8 x64环境下,VS2010的C#工程中引用了COM组件(Acti ...

  6. 解决win8下chrome浏览器打开提示没有注册类的方法

    今天又把win8装回来了,继续装了个chrome浏览器,但是发现只能从安装的文件打开,从快捷方式或者快速启动栏都会提示没有注册类.找到一种解决的办法是删除注册表中的相关键值,具体如下: 1.打开注册表 ...

  7. cocos2dx3.0rc导出自定义类到lua的方法

    以前要导出c++类到lua,就得手动维护pkg文件,那简直就是噩梦,3.0以后就会感觉生活很轻松了. 转载请注明出处http://www.cnblogs.com/mrblue/p/3637910.ht ...

  8. 预览Cube出现没有注册类错误

    用Microsoft SQL Server Management Studio预览AS上的Cube 出现如下错误. TITLE: Microsoft SQL Server Management Stu ...

  9. win7系统cocos2dx 3.4 绑定自定义类到Lua

    Cocos2d-x 3.0开始使用bindings-generator来生成c++类的lua绑定.bindings-generator基于tolua++,通过配置tools/tolua中的ini文件以 ...

随机推荐

  1. reset 单个文件 回退

    git将单个文件恢复到历史版本的正确方法如下: git reset commit_id 文件路径 git checkout -- 文件路径

  2. H5+微信支付报-1问题

    1.检查发起支付的参数,全部设置为小写: WxPayData jsApiParam = new WxPayData(); jsApiParam.SetValue("appid", ...

  3. nginx tomcat 动静分离

    所谓动静分离就是通过nginx(或apache等)来处理用户端请求的图片.html等静态的文件,tomcat(或weblogic)处理jsp.do等动态文件</span>,从而达到动静页面 ...

  4. HTML与CSS

    HTML中DTD是什么?是一套关于标记符的语法规则.DTD是一种保证html格式正确最有效的方法.一个DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则. ...

  5. hive --service metastore 出现的问题

    Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083 执行命令jps root@hadoopm:/usr# jps1763 Res ...

  6. VS2013自带的Browser Link功能引发浏览localhost网站时不停的轮询

    浏览localhost网站时候不管你打开那个页面它都会不停的轮询.据悉这是VS2013自带的Browser Link功能,里面用到SignalR机制 什么是Browser Link功能,什么是Sign ...

  7. 更改ubuntu多系统启动顺序

    电脑上双系统,启动时界面如下 ubuntu advance ubuntu option windows 在/boot/grub/grub.cfg中,查看到可以简单的修改/etc/defaulg/gru ...

  8. Python学习笔记 for windows 二

    函数 abs(-20)                                        //结果为:20,绝对值函数 def 函数名称([参数1,参数2,参数3]): 执行语句 retu ...

  9. margin重叠现象与margin auto自适应居中

    上下相邻的(算一种兄弟关系)普通元素,上下边距并非简单的相加,而是取其中最大的边距值:而浮动的盒子边距是相加的:父子div也会发生重叠,并不是bug: <style>#test1{ wid ...

  10. [原]简易android反编译教程

    1.apktool d -f <.apk> <output> 反编译出资源文件(及smali)2.使用winrar打开apk,提取出classed.dex,执行 d2j-dex ...