北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 9028|回复: 6

Mushclient Lua 怎么调用COM组件

[复制链接]
发表于 2009-12-2 10:23:40 | 显示全部楼层 |阅读模式
我使用VBScript 调用COM组件没有问题,但是用Lua 在Mushclient 中调用就出现问题了,代码如下:

local f = package.loadlib ("luacom.dll", "luaopen_luacom")
print (f)

f= nil
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-12-2 10:53:13 | 显示全部楼层
luacom.dll 需要使用Gammon提供的。如果是从luacom的官网下载的,在MUSH里是不能直接使用的,因为MUSH里的Lua是重新封装过的,luacom.dll需要修改源码后重新编译。Gammon提供的luacom.dll是Gammon修改过的,可以直接使用,需要与MUSHClient.exe及lua5.1.dll在同一文件夹下。


luacom在MUSH里使用的例子:

  1. assert (package.loadlib ("luacom.dll","luacom_open")) ()
  2. local oWMP = assert (luacom.CreateObject ("Wmplayer.OCX"), "cannot open Wmplayer.OCX")
复制代码


PS:
仅仅是个例子,作为参考,如果安装了Windows Media Player 11,你会发现用不了的。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-12-2 11:21:16 | 显示全部楼层
Ddid 大大,根据你的说法,我更新DLL ,现在可以执行MushClient 的实例代码,但是我在VBScript 调用如下代码是正常的:
  1. Sub Greet
  2. Dim iCounter
  3. for iCounter = 1 to 10
  4. world.send "say Hi there"
  5. next
  6. end sub
  7. Sub FindRoomNo
  8. Set Phys = CreateObject("PhysServer2.NET_Temperature")   
  9.   
  10. PathStr = Phys.Search("1","960")
  11. world.send "say " + PathStr

  12. bRoomNo = Phys.findroomno("中央广场","none")
  13. world.send "say "+bRoomNo
  14. End Sub
复制代码
但是我 LUA 代码
  1. assert (package.loadlib ("luacom.dll","luacom_open")) ()
  2. Phys = luacom.CreateObject("PhysServer2.NET_Temperature")
  3. --local RoomNo = Phys:Search(1,960)
  4. --print ( RoomNo)
  5. local RoomNo = Phys:findroomno("武庙","none");
复制代码
返回
  1. Immediate execution
  2. COM exception:(G:\source\luacom\tLuaCOM.cpp,394):鏈?皢瀵硅薄寮曠敤璁剧疆鍒板?璞$殑瀹炰緥銆?
  3. stack traceback:
  4.         [C]: in function 'findroomno'
  5.         [string "Script file"]:5: in main chunk
复制代码
这个大概是什么方面的原因,是COM组件原因,还是我调用不正确?

谢谢回复

[ 本帖最后由 minipixy 于 2009-12-2 11:23 AM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-12-2 11:33:14 | 显示全部楼层
看错误提示,应该是luacom调用不了这个COM组件,把


  1. Phys = luacom.CreateObject("PhysServer2.NET_Temperature")
复制代码


这句,改为:

  1. local Phys = assert (luacom.CreateObject ("PhysServer2.NET_Temperature"), "cannot open PhysServer2.NET_Temperature")
复制代码


再看一下是什么提示?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-12-2 13:29:35 | 显示全部楼层
还是同样的错误信息,但是我调用COM组件的一个函数:Search 可以成功返回。不理解为什么findroomno 无法返回

  1. n;n;n;n;n;nu;nu;nd;nu;nd;nd;nu;nu;nu;nd;n;n;ne;ne;nu;nd;nw;n;n;n;n;n;n;n (Search 返回的信息)
  2. Run-time error
  3. World: XKX
  4. Immediate execution
  5. COM exception:(G:\source\luacom\tLuaCOM.cpp,394):鏈?皢瀵硅薄寮曠敤璁剧疆鍒板?璞$殑瀹炰緥銆?
  6. stack traceback:
  7.         [C]: in function 'findroomno'
  8.         [string "Script file"]:5: in main chunk

复制代码



新的代码

  1. assert (package.loadlib ("luacom.dll","luacom_open")) ()
  2. local Phys = luacom.CreateObject("PhysServer2.NET_Temperature")
  3. local PathStr = Phys:Search(1,960)
  4. print ( PathStr)
  5. local RoomNo = Phys:findroomno("中央广场","none")

复制代码
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-12-2 13:36:14 | 显示全部楼层
把代码贴全吧(从 function 开始,到 end 结束)。不然都不知道findroomno到底是这个 function 的名字,还是pyhs的方法名……

findroomno这个方法在PhysServer2.NET_Temperature这个COM组件中有定义么?是不是这个方法有问题?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-1-20 14:14:10 | 显示全部楼层
mark该问题加入FAQ
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-24 07:34 PM , Processed in 0.011643 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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