LuaInterface没有调用一个方法。

我正在尝试在我的C#.NET程序中实现lua脚本,但当我执行代码时,其中一个方法没有被执行。

这是类:

`` ` namespace Program1{ 公共类LuaFunctions{ 客户端客户端{ get; set; } 私人Lua lua{ get; set; }

公共LuaFunctions(客户端c){ 这个客户= C; 这个lua= 新Lua();

registerFunctions(); }

public void ExecuteCode(string code) { 这个lua.DoString(代码); }

private void registerFunctions() { lua.RegisterFunction(“message”,this,this.GetType()。GetMethod(“Message”)); lua.RegisterFunction(“pname”,this,this.GetType()。GetMethod(“playername”)); }

public void Message(string s) { System.Windows.Forms.MessageBox.Show(s); }

public string playername() { 返回客户端。球员。名称; } } }

`` `

当我执行这行lua代码“message(pname)”时,它甚至没有尝试执行方法“playername()”来返回一些值,所以它在DoString()行中崩溃,因为“pname”是“返回”null。

点赞
用户258523
用户258523

pname正在被注册为一个函数,而不是设置为包含字符串值的变量。

当执行 message(pname) 时,message 函数被赋予了 pname 函数的值,而不是被赋予一个字符串 (或调用 pname 函数的结果)。

要将 pname 函数的结果传递给 message,你需要使用 message(pname())

2014-11-24 13:33:40
用户95573
用户95573

这取决于你正在尝试创建变量的位置。如果你想在 Lua 中设置一些变量,那么lua["somevariable"] = "value";就可以了。下面是一个更完整的例子:

将原始值传递给状态:

double val = 12.0;
lua["x"] = val; // 创建一个全局值 'x'
var res = lua.DoString ("return 10 + x*(5 + 2)")[0] as double;

检索全局值:

lua.DoString ("y = 10 + x*(5 + 2)");
var y = lua["y"] as double; // 检索 y 的值
2015-02-12 13:31:48