Mushclient Lua 怎么调用COM组件
我使用VBScript 调用COM组件没有问题,但是用Lua 在Mushclient 中调用就出现问题了,代码如下:local f = package.loadlib ("luacom.dll", "luaopen_luacom")
print (f)
f= nil luacom.dll 需要使用Gammon提供的。如果是从luacom的官网下载的,在MUSH里是不能直接使用的,因为MUSH里的Lua是重新封装过的,luacom.dll需要修改源码后重新编译。Gammon提供的luacom.dll是Gammon修改过的,可以直接使用,需要与MUSHClient.exe及lua5.1.dll在同一文件夹下。
luacom在MUSH里使用的例子:
assert (package.loadlib ("luacom.dll","luacom_open")) ()
local oWMP = assert (luacom.CreateObject ("Wmplayer.OCX"), "cannot open Wmplayer.OCX")
PS:
仅仅是个例子,作为参考,如果安装了Windows Media Player 11,你会发现用不了的。 Ddid 大大,根据你的说法,我更新DLL ,现在可以执行MushClient 的实例代码,但是我在VBScript 调用如下代码是正常的:Sub Greet
Dim iCounter
for iCounter = 1 to 10
world.send "say Hi there"
next
end sub
Sub FindRoomNo
Set Phys = CreateObject("PhysServer2.NET_Temperature")
PathStr = Phys.Search("1","960")
world.send "say " + PathStr
bRoomNo = Phys.findroomno("中央广场","none")
world.send "say "+bRoomNo
End Sub 但是我 LUA 代码assert (package.loadlib ("luacom.dll","luacom_open")) ()
Phys = luacom.CreateObject("PhysServer2.NET_Temperature")
--local RoomNo = Phys:Search(1,960)
--print ( RoomNo)
local RoomNo = Phys:findroomno("武庙","none");返回Immediate execution
COM exception:(G:\source\luacom\tLuaCOM.cpp,394):鏈?皢瀵硅薄寮曠敤璁剧疆鍒板?璞$殑瀹炰緥銆?
stack traceback:
: in function 'findroomno'
:5: in main chunk这个大概是什么方面的原因,是COM组件原因,还是我调用不正确?
谢谢回复
[ 本帖最后由 minipixy 于 2009-12-2 11:23 AM 编辑 ] 看错误提示,应该是luacom调用不了这个COM组件,把
Phys = luacom.CreateObject("PhysServer2.NET_Temperature")
这句,改为:
local Phys = assert (luacom.CreateObject ("PhysServer2.NET_Temperature"), "cannot open PhysServer2.NET_Temperature")
再看一下是什么提示? 还是同样的错误信息,但是我调用COM组件的一个函数:Search 可以成功返回。不理解为什么findroomno 无法返回
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 返回的信息)
Run-time error
World: XKX
Immediate execution
COM exception:(G:\source\luacom\tLuaCOM.cpp,394):鏈?皢瀵硅薄寮曠敤璁剧疆鍒板?璞$殑瀹炰緥銆?
stack traceback:
: in function 'findroomno'
:5: in main chunk
新的代码
assert (package.loadlib ("luacom.dll","luacom_open")) ()
local Phys = luacom.CreateObject("PhysServer2.NET_Temperature")
local PathStr = Phys:Search(1,960)
print ( PathStr)
local RoomNo = Phys:findroomno("中央广场","none")
把代码贴全吧(从 function 开始,到 end 结束)。不然都不知道findroomno到底是这个 function 的名字,还是pyhs的方法名……
findroomno这个方法在PhysServer2.NET_Temperature这个COM组件中有定义么?是不是这个方法有问题? mark该问题加入FAQ
页:
[1]