toLua初始化碰到的问题

lua可以加载时必备的内容:

第一个:LuaState:必须,最好是做成单例管理,因为在使用protobuf的时候,如果不是同一个luastate加载的lua,有可能出现如下问题:

lua代码中require时找不到对应的C库。例如:require "pb" 找不到。因为tolua框架里有个pb.c,在做protobuf编码和解码的时候会调用到,如果不是同一个luastate创建的调用,则出现调不到require "pb"

第二个:LuaLoader loader = new LuaLoader();必须要,没有为什么。

第三个:OpenLibs()

  这个东西非常重要,它标志着你一些C写的PB的内容能不能使用,比如你想去做一个LUAtable去对应protobuf协议,那么你在里面编码解码时,tolua的框架会去调用require "pb",如果你没有写这个库的注册,那么你将不能使用pb的库。

  这个库里的注册内容包括如下:

  lua.OpenLibs(LuaDLL.luaopen_pb);
  lua.OpenLibs(LuaDLL.luaopen_sproto_core);
  lua.OpenLibs(LuaDLL.luaopen_protobuf_c);
  lua.OpenLibs(LuaDLL.luaopen_lpeg);
  lua.OpenLibs(LuaDLL.luaopen_bit);
  lua.OpenLibs(LuaDLL.luaopen_socket_core);

第四个:lua.luasettop

  网络上的解释是如下,具体也不用关注,不明白LUA底层的话也很难明白这个:

  设置栈的高度,如果之前的栈顶比新设置的更高,那么高出来的元素会被丢弃,反之压入nil来补足大小。
另外,Lua提供了一个宏,用来从栈中弹出n个元素:#define lua_pop(L, n) lua_settop(L, -(n)-1)

第五个:luabinder.bind(lua)

  将当前luastate的虚拟机中绑定C#中的一些类、全局类、委托等等。

第六个:Register

  注册协程,你懂的,协程太重要了

时间: 2024-10-08 10:08:35

toLua初始化碰到的问题的相关文章

tolua++初始化过程

当在c++的工程使用lua时,可以通过tolua++将c++的类注册到lua中,从而使得可以在lua中使用c++中的类和对象.先不说其主要可以做些什么,当了解到更多时再进行解说.现在这里仅仅说明toua++初始化时的动作. 假设当前有两个类:CMyObject和CStudent,CStudent继承CMyObject,如下: CMyObject: class CMyObject { public: CMyObject(); ~CMyObject(); }; CStudent: class CSt

恢复索引时碰到的六个问题(莫非编程行业的坑特别多?)

恢复索引时碰到的六个问题:1. 切记不要使用外部sqlite工具打开观察数据库情况,看的时候舒服,调试的时候却忘了关闭它,导致无论怎么关闭数据库都不行(rename文件总是失败) 2. 解压缩到当前目录,哪一个目录要写清楚(默认可能会解压缩到可执行文件的目录下),但是解压缩后的文件名不用写,因为压缩包里的文件是什么名字就是什么名字 3. 必须要等m_database对象消失了,才能移除这个数据库 http://doc.qt.io/qt-5/qsqldatabase.html#removeData

tolua#代码简要分析

简介 tolua#是Unity静态绑定lua的一个解决方案,它通过C#提供的反射信息分析代码并生成包装的类.它是一个用来简化在C#中集成lua的插件,可以自动生成用于在lua中访问Unity的绑定代码,并把C#中的常量.变量.函数.属性.类以及枚举暴露给lua.它是从cstolua衍变而来.从它的名字可以看出,它是集成了原来的tolua代码通过二次封装写了一个C#与tolua(c)的一个中间层. All problems in computer science can be solved by

读书笔记 effective c++ Item4 确保对象被使用前进行初始化

Item4 确保对象被使用前进行初始化 C++在对象的初始化上是变化无常的,例如看下面的例子: Int x; 在一些上下文中,x保证会被初始化成0,在其他一些情况下却不能够保证.看下面的例子: Class Point { Int x,y; }; Point p; P的数据成员有时候保证能够被初始化(成0),有时候却不能.如果你从不存在未初始化对象的语言中转到c++, 就需要注意了,因为这很重要. 使用未初始化对象的坏处 读取未初始化的值会产生未定义的行为.在一些平台中,仅仅读取未初始化的值就会让

可能碰到的iOS笔试面试题(4)--C语言

可能碰到的iOS笔试面试题(4)--C语言 可能碰到的iOS笔试面试题(4)--C语言 C语言,开发的基础功底,iOS很多高级应用都要和C语言打交道,所以,C语言在iOS开发中的重要性,你懂的.里面的一些问题可能并不是C语言问题,但是属于计算机的一些原理性的知识点,所以我就不再另外写一篇文章了,直接写在这里. 当你写下面的代码时会发生什么事? least = MIN(*p++, b); 结果是:((p++) <= (b) ? (p++) : (*p++)) 这个表达式会产生副作用,指针p会作三次

Winform异步初始化UserControl的问题

今天碰到一个非常奇怪的问题,问题的描述如下: 1. 新建了一个winform窗体 2. 新建一个UserControl 3. UserControl中添加一个panel和一个checkbox,checkbox是panel的子控件,panel是userControl的子控件(checkbox和panel都是自己重新封装的) 3. 在窗体Shawn事件中起一个线程,异步初始化UserControl 4. 当代码走到UserControl设计器中的this.panel1.PerformLayout()

Java 类成员的初始化顺序

Java 类成员的初始化顺序 前言:开发中碰到一个Java文件中有很多的成员变量,包括静态和非静态的,还有很多的初始化方法,很好奇这些成员的初始化顺序,在这里作个研究. ? 1 ?无继承情况下的Java初始化顺序: class Sample { Sample(String s) { System.out.println(s); } Sample() { System.out.println("Sample默认构造函数被调用"); } } class Test { static Samp

Java对象初始化详解

出处:http://blog.jobbole.com/23939/ 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.本文试图对Java如何执行对象的初始化做一个详细深 入地介绍(与对象初始化相同,类在被加载之后也是需要初始化的,本文在最后也会对类的初始化进行介绍,相对于对象初始化来说,类的初始化要相对简单一 些). 1.Java对象何时被初始化 Java对象在其被创建时初始化,在Java代码中,有两种行为可以引起对象的创建.其中比较直观的一种,也就是通常所

Delphi初始化和析构 initialization和finalization

原文转载于:http://shao198888.blog.163.com/blog/static/238380067201502010141545 1 initialization和finalization 测试办法:启动一个控制台程序,因为一般的application有太多的单元引用,可能会造成一些调试上的麻烦 经过测试,大致结果可能是这样的 加载顺序与project及各单元的引用顺序有关 首先从project文件中加载第一个单元如A,在试图加载A的Initialization时,先查看A的u