博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uLua中遇到的问题
阅读量:6572 次
发布时间:2019-06-24

本文共 1697 字,大约阅读时间需要 5 分钟。

1.C#调用lua函数参数为空的问题

在C#中调用以(:)定义的函数传参时,self被第一个参数覆盖,而obj将为空

 

MessagePanel = {};function MessagePanel:Test1(obj)	--lua调用正常,obj为传入参数,self为MessagePanel本身	--C#调用异常,obj为空,self为传入的参数,	print(type(obj)..type(self))endfunction MessagePanel.Test2(obj)	--lua和C#调用都是正确的	print(type(obj))end

 

 

 

 

 

2.C#调用不到Lua父类函数的问题

在Lua中调用table的元表函数是可以的。

在C#中调用Lua中table的元表函数是找不到的。

3.Lua中调用不到C#对象的父类函数

问题原因,

因为父类没有生成wrap

解决办法,

生成所有父类的wrap,注意中间不能间断(父类的父类都需要);

3.Lua中调用不到C#重载函数

问题原因,

在C#中一个类里面有一个没有参数的类成员函数和一个有一个参数的同名静态函数,在这种情况下wrap的生成就会有问题,先上代码

原函数

public Type GetType();

public static Type GetType(string typeName);

生成的wrap函数

static int GetType(IntPtr L)

 {
  int count = LuaDLL.lua_gettop(L);

  if (count == 1)       //注意本行

  {
   Type obj = LuaScriptMgr.GetTypeObject(L, 1);
   Type o = obj.GetType();
   LuaScriptMgr.Push(L, o);
   return 1;
  }
  else if (count == 1 && LuaScriptMgr.CheckTypes(L, 1, typeof(string)))    //注意本行
  {
   string arg0 = LuaScriptMgr.GetString(L, 1);
   Type o = Type.GetType(arg0);
   LuaScriptMgr.Push(L, o);
   return 1;
  }

代码只贴了有用的部分

因为静态函数不用传递调用对象,成员函数需要传递调用对象,所以他们两个的传入参数个数都是1

从判断语句上看这个第二个判断将永远无法进入所以这个静态函数也就无法调用了

解决办法,

a.如果是自己写的代码尽量避开这种写法;

b.如果是SDK的写法找一下有没有其他的相同重载函数;

c.如果a,b都无法解决。。就手动修改这个判断把第一个判断和第二个判断对掉顺序;

4.Lua中报错  function at line xxx has more than 60 upvalues

 

function at line xxx has more than 60 upvalues。lua的upvalue是有上限的,这个上限定义在luaconf.h中:


/*
@@ LUAI_MAXUPVALUES is the maximum number of upvalues per function
@* (must be smaller than 250).
*/
#define LUAI_MAXUPVALUES    60

当然不建议修改这个值然后重新编译lua了,如果local变量太多,还是放到table里面吧。

luaconf.h中还定义了其他的一些上限,比如这个:

/*
@@ LUAI_MAXVARS is the maximum number of local variables per function
@* (must be smaller than 250).
*/
#define LUAI_MAXVARS        200

 

 

转载于:https://www.cnblogs.com/lexiaoyao-jun/p/5208226.html

你可能感兴趣的文章
【转】Android 最火框架XUtils之注解机制详解
查看>>
CentOS7和win7双系统启动项
查看>>
semver语义化版本号
查看>>
(原创)INTERVAL分区表与RANGE分区表相互转化
查看>>
设备树概述【转】
查看>>
[转载]资深程序员点评当前某些对Lotus Domino 的不实评论
查看>>
OC中类别、扩展、协议与托付
查看>>
spring ioc
查看>>
Matlab学习笔记 figure函数
查看>>
任务调度器配置文件
查看>>
【JavaScript吉光片羽】--- 滑动条
查看>>
ORACLE 存储过程异常捕获并抛出
查看>>
arcgis api for js之echarts开源js库实现地图统计图分析
查看>>
Eclipse 格式化代码时不换行与自动换行WordWrap插件
查看>>
又一个小程序
查看>>
cursor游标(mysql)
查看>>
[review]Design Pattern:Facade
查看>>
HDU-1255 覆盖的面积 矩形面积交
查看>>
Microsoft JDBC Driver 4.0 for SQL Server
查看>>
delphi2010中FastReport的安装方法
查看>>