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文件以 ...
随机推荐
- delphi URL 编码的转换
先介绍一下,Delphi中处理Google的URL编码解码,其中就会明白URL编码转换的方法的 从delphi的角度看Google(谷歌)URL编码解码方式 在网上搜索了一下,似乎没有什么关于goog ...
- lunece全文检索的入门与简单优化
2016-12-15 项目中需要加载下面几个工具包 1 package com.cn.shupu.util; import java.io.BufferedReader; import java.io ...
- PHP (sendmail / PHPMailer / ezcMailComposer)发送邮件
一. 使用 PHP 内置的 mail() 函数 1. Windows 下 环境:WampServer2.5(Windows 10,Apache 2.4.9,MySQL 5.6.17,PHP 5.5.1 ...
- EJB之Timer
EJB Timer 要么: Annotation @Schedule 或者方法前声明@Timeout 要么: 在部署描述中定义timeout-method 如果是使用@Schedule, Timer在 ...
- 分析器错误消息: 未能加载类型“Automation.Web.MvcApplication”。
常见原因1 : 可能是自己手动修改了项目 ==>属性==>生成的输出路径 ,导致版本不兼容 常见员因2 : Global的 命名空间 与 项目的命名空间 不一致 常见原因3 : 查看 ...
- WVS简单使用
Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行安全漏洞,如交叉站点脚本,sql 注入等.在被 ...
- WPF 仪表盘 刻度盘 动态 加载中 开源
1. 表盘 参数可以设置, codeproject上写的.网址在这里. 源码里有demo,很详细. 源码在这里. 2. 动态Loading 截图效果跟实际有点不一样. 自己把源码写成 资源就好用了呗 ...
- CentOS 7中防火墙 firewall-cmd命令
在 CentOS 7 iptable 防火墙已经被 firewall替代 1.暂时开放FTP服务 firewall-cmd --add-service=ftp 2.永久开放FTP服务 firewall ...
- C# ASP.NET MVC 图片盗链 加水印 的问题
ImageClass using System; using System.Collections; using System.IO; using System.Drawing; using Syst ...
- 解决windows下FileZilla server中文乱码问题
最利用cuteftppro FTP做文件夹同步,发现中文的文件夹及文件名都出现了乱码问题, 一开始以为是cuteftppro的问题,谷哥度娘找了一堆的解决方案都没有解决乱码问题,真是头疼啊! 后来终于 ...