minipixy 发表于 2009-12-2 10:23:40

Mushclient Lua 怎么调用COM组件

我使用VBScript 调用COM组件没有问题,但是用Lua 在Mushclient 中调用就出现问题了,代码如下:

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

f= nil

ddid 发表于 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里使用的例子:

assert (package.loadlib ("luacom.dll","luacom_open")) ()
local oWMP = assert (luacom.CreateObject ("Wmplayer.OCX"), "cannot open Wmplayer.OCX")


PS:
仅仅是个例子,作为参考,如果安装了Windows Media Player 11,你会发现用不了的。

minipixy 发表于 2009-12-2 11:21:16

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 编辑 ]

ddid 发表于 2009-12-2 11:33:14

看错误提示,应该是luacom调用不了这个COM组件,把


Phys = luacom.CreateObject("PhysServer2.NET_Temperature")


这句,改为:

local Phys = assert (luacom.CreateObject ("PhysServer2.NET_Temperature"), "cannot open PhysServer2.NET_Temperature")


再看一下是什么提示?

minipixy 发表于 2009-12-2 13:29:35

还是同样的错误信息,但是我调用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")

ddid 发表于 2009-12-2 13:36:14

把代码贴全吧(从 function 开始,到 end 结束)。不然都不知道findroomno到底是这个 function 的名字,还是pyhs的方法名……

findroomno这个方法在PhysServer2.NET_Temperature这个COM组件中有定义么?是不是这个方法有问题?

lzkd 发表于 2010-1-20 14:14:10

mark该问题加入FAQ
页: [1]
查看完整版本: Mushclient Lua 怎么调用COM组件