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. myString操作符重载

    写在前面的话: 重载是C++的重要内容,在自定义一个类的时候,需要对类中的方法进行重载,才能方便的实现相应的功能,比如一些运算符,构造,析构函数,一些功能函数等等,而C++语言自带的这些东西只使用于基 ...

  2. 玩转 H5 下拉上滑动效

    按照上面的技术方案实施,具体过程为: 禁用页面顶部下拉事件  ------>  将页面的主体内容用一个DIV容器包含起来,同时复制需要放大处理的内容节点至主体内容之外  ------> 绑 ...

  3. buy

    <script type="text/javascript"> var is_enabled = -1; var checkSubmitFlg = false; var ...

  4. Linux 命令快捷键

    Linux 命令快捷键 tab 自动补齐(有不知道的吗)Ctrl+u 删除(剪切)此处至开始所有内容 Ctrl+k 删除从光标所在位置到行末 快速命令行 – 快捷方式• history 搜索历史执行过 ...

  5. jQuery 隐藏/显示

    1.如何隐藏部分文本(简单案例) //样式 <style type="text/css">            div.ex {                bac ...

  6. 使用Microsoft Fakes隔离测试代码

    在单元测试(Unit Test)中我们遇到的问题之一是:假如被测试组件(类或项目)为A,组件A依赖于组件B,那么在组件A的单元测试ATest中测试A时,也需要依赖于B,在B发生改动后,就可能影响到A的 ...

  7. storage disk

    scsi fdisk -l can not display the new disk Rescan the SCSI Bus to Add a SCSI Device Without rebootin ...

  8. react 调用 native 的callShareAllFunc()方法,实现分享

    let shareName = { '0': '微信', '1': '朋友圈', '2': '新浪微博', '3': ' QQ', '4': 'QQ空间'};render(){ //分享YztApp. ...

  9. 如何发布一个Mac应用并使其成为全球付费榜第一

    Readdle公司如何发布第一个 Mac App,并使之成为Mac App Store 全球付费排名第一的 Easy注:自从发布了<程序员如何优雅的挣零花钱?>后,就不断有同学询问怎么做A ...

  10. 无题 MVC

    1. MVC 里controller 返回匿名类型, 在View里是访问不了匿名类型的字段,因为它是Internal Private, 必须定义强类型 2. 扩展view的方法 public stat ...