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文件以 ...
随机推荐
- 字符串转数字_atoi_stringstream
一.#include <cstdlib> 字符串转换到整型数,函数原型:int atoi(const char *nptr) 注意事项:有符号整型,能转换的最大字符串是:"214 ...
- 推荐轻量高效无依赖的开源JS插件和库
目录 图片 布局 音频视频 编辑器 轮播图 弹出层 表单 存储 动画 时间 其它 CDN 图片 baguetteBox.js - 是一个简单易用的响应式图像灯箱效果脚本.demo Lightgalle ...
- PHP (sendmail / PHPMailer / ezcMailComposer)发送邮件
一. 使用 PHP 内置的 mail() 函数 1. Windows 下 环境:WampServer2.5(Windows 10,Apache 2.4.9,MySQL 5.6.17,PHP 5.5.1 ...
- PHP 正则表达式匹配中文字符
例如在 MySQL 的 bin-log 文件中选取特定的数据库语句来恢复数据时,只要选出某个库的 INSERT INTO 操作(去掉了多余信息,只列出 SQL 语句) INSERT INTO `crm ...
- GCC编译C代码
C程序的编译过程 常用文件的后缀名: gcc编译c代码 1.gcc 常用编译选项: 2.gcc编译方法 testc.c: #include <stdio.h> int main ...
- app活动页面上的痛点
app项目上需要做一个小的活动,先看下页面布局 需求是这5个板块逐个展示,展示一块的时候,页面整体向上滚动一定的距离. 刚开始考虑的时候,是准备依赖css3属性的transition实现的,包括顺序延 ...
- VS2013自带的Browser Link功能引发浏览localhost网站时不停的轮询
浏览localhost网站时候不管你打开那个页面它都会不停的轮询.据悉这是VS2013自带的Browser Link功能,里面用到SignalR机制 什么是Browser Link功能,什么是Sign ...
- 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”(是否缺少程序集引用?)
今天,在.net4.5,mvc4下新建了个区域,运行起来就报这个错误: 命名空间"System.Web"中不存在类型或命名空间名称"Optimization"( ...
- 使用OpenSSL为支付宝生成RSA私钥
通过openssl工具生成RSA的公钥和私钥(opnssl工具可在互联网中下载到,也可以点此下载无线接口包,里面包含此工具)打开openssl文件夹下的bin文件夹,执行openssl.exe文件: ...
- Bloomberg面经准备: Josephus problem
Given a circular single linked list.Write a program that deletes every kth node until only one node ...