看流星社区

 找回密码
 注册账号
查看: 2178|回复: 0

lua5.2.1 支持中文,变向调用C类函数。

[复制链接]

该用户从未签到

发表于 2013-1-30 16:29:53 | 显示全部楼层 |阅读模式
找了几天的资料,关于lua调用C++类,无非就是千篇一律的东西,没实际性内容,并且本菜又不喜欢luaplus,luabind,luaTinks等之类的二次封装(一会儿C,一会儿C++,说不定编译狂出错)

我是用来解释脚本的,不是用来搞游戏的。这么高深的东西,咱变通下。

在C函数里调用类函数,在注册就可以。直接看代码

  1. // luatest.cpp : 定义控制台应用程序的入口点。

  2. #include "stdafx.h"
  3. extern "C" {  
  4. #include "lua.h"  
  5. #include "lauxlib.h"  
  6. #include "lualib.h"  
  7. };  
  8. #include "Cceshi.h"  //我们的测试类,里面就一个print函数。
  9. #include "stdio.h"
  10. #include <iostream>
  11. using namespace std;
  12. static int gxm(lua_State *L)    //每个注册的C函数都应该遵守这样的调用
  13. {
  14.         int n = lua_gettop(L);
  15.         double sum;
  16.         int i;
  17.         for (i=1;i<=n;i++)
  18.         {
  19.                 sum+=lua_tonumber(L,i);
  20.         }
  21.         if (sum>100)
  22.         {
  23.                 cout<<"累加超过100"<<endl;
  24.         }
  25.         lua_pushnumber(L,sum/n);
  26.         lua_pushnumber(L,sum);
  27.         Cceshi gxm2;
  28.         gxm2.gxm1();
  29.         return 2;
  30. }
  31. int _tmain(int argc, _TCHAR* argv[])
  32. {
  33.         //初始化Lua
  34.         lua_State* L = luaL_newstate();
  35.        
  36.         //调用基本库
  37.         luaL_openlibs(L);

  38.         lua_register(L,"累加",gxm);

  39.         luaL_dofile(L,"C:\\ceshi.lua");


  40.         //关闭对象
  41.         lua_close(L);

  42.         return 0;
  43. }
复制代码
很简单吧。我们的ceshi.lua写这样的。

  1. avg,sum=累加(10,20,30,40,50)
  2. print("The avg is ",sum)
  3. print("The sum is ",avg)
复制代码
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-4 01:09

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表