【发布时间】:2016-06-06 09:48:27
【问题描述】:
所以我希望有人可以提供帮助,我敢肯定这可能是我所缺少的一些简单的东西。我正在使用 PHP 访问第三方软件的 .net API。
基于 API 上的极简文档,我有一个工作的 vbsript 连接到对象,执行登录,然后执行查询,导致查询的输出被转储到消息框。
这是 vbscript 示例:
'Test device status
Set xxx = CreateObject("The.API.Object.Goes.Here")
'Login
Result = Xxx.LoginToHost("xxx.xxx.xxx.xxx","8989","Administrator","")
if (Result = true) then
MsgBox("OK")
else
MsgBox("Error - " & Xxx.LastError)
WScript.Quit
end if
'Get Status
Result = Xxx.GetDeviceStatus("", out)
if (Result = true) then
MsgBox(out)
else
MsgBox("Error - " & Xxx.LastError)
end if
'Logout
Result = Xxx.Logout()
if (Result = true) then
MsgBox("Logout OK")
else
MsgBox("Error - " & Xxx.LastError)
end if
Xxx.GetDeviceStatus 有两个边界,第一个是设备目标,如果留空则返回所有设备,第二个是转储结果的字符串变量。
当脚本执行时,第二个消息框包含我所期望的所有设备的列表。
在 PHP 中我有:
$obj = new DOTNET("XxxScripting, Version=1.0.XXXX.XXXXXX, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXXXX","Here.Goes.The.Api");
$obj->LoginToHost('xxx.xxx.xxx.xxx','8989','Administrator','');
$result = $obj->GetDeviceStatus('','out');
echo $result."<br />";
回显结果为 1,因为 result 的值是布尔值并且 GetDeviceStatus 成功。我想不通的是如何得到'out'的值,这是实际的查询结果。
任何帮助将不胜感激。
【问题讨论】:
-
读取神秘物体的类型库。
-
在我看来
GetDeviceStatus期望第二个参数是一个变量,因此它可以将数据传递给它。如果您将 PHP 中的定义与 VBScript 相比,它们是不等价的,在 PHP 中您传递字符串'out'而不是像在 VBScript 中那样传递名为out的变量。也许尝试在 PHP 中定义一个名为$out的变量并将其作为第二个参数传递?$result = $obj->GetDeviceStatus('', $out);. -
按照另一个回复中的建议尝试了这个。 DOTNET 对象似乎没有将值返回给 PHP,因此 $out 变量没有被定义,最终会出现未定义的变量错误。如果您将变量定义为空字符串或 null,它会以空字符串或 null 的形式返回。
-
另一个回答,另一个问题在哪里?