php调com组件输出参数,php调用com组件的参数问题

短信 PHP 引用 我是用php开发短信猫接口,其中一个是读取短信,代码如下:

$objSMS = new com("alasun.alasunsms");

$objSMS->CommPort=$port;

$lngRes=$objSMS->OpenComm;

If($objSMS->ReadMsgByIndex($Index, $sNo, $sCon, $MsgCenterNo, array($dSendTime),$lTimeZone) == 0)

{

echo $sNo.$sCon."

";

}

参数说明:

$index:短信序号,唯一一个传入参数

$sNo:短信号码,输出参数

$sCon:短信内容,输出参数

$MsgCenterNo:短信中心,输出参数

$dSendTime:短信时间,输出参数

$lTimeZone:短信时区,输出参数

//

//我用比如asp或其他语言处理都很简单,不管输入还是输出参数一样传,执行后输出参数就有相应的值了,可php的怎么搞都不行,测试如下:

//第一次调用

If($objSMS->ReadMsgByIndex($Index, $sNo, $sCon, $MsgCenterNo, $dSendTime,$lTimeZone) == 0)

//这样调用出现如下错误

Fatal error: Uncaught exception 'com_exception' with message 'Parameter 4: 类型不匹配。

' in E:\AppServ\www\sms.php:50

//50行就是上面这行代码,因为$dSendTime是时间类型,com组件是c++写的。

//第二次调用,看了下资料,$dSendTime时间参数应该加上array,php本身没有像其他语言的datetime数据类型

If($objSMS->ReadMsgByIndex($Index, $sNo, $sCon, $MsgCenterNo, array($dSendTime),$lTimeZone) == 0)

//这样调用出现如下错误,好像什么引用有问题

Fatal error: Cannot pass parameter 5 by reference in E:\AppServ\www\cron\smsreceive.php on line 50

这样情况到底应该怎样调用呢?按照后面的方法,我在后面5个输出参数前都加 & 也是一样错误的。

回复讨论(解决方案)

搜索了一下,短信猫的相关说明

读取短消息 (ReadMsgByIndex)

功能描述:读取SIM卡中指定位置的短消息

参数: iIndexNo Integer 短信序号

sNo string 收到短信的来源号码

sCon string 收到短信的内容

sMsgCenterNo string 短信中心号码

dSendTime date 发送短信的时间

iSendTimeZone Integer 发送短信的时区

返回: Long 0 读取成功,其他 读取失败

dSendTime 是一个双精度数,对应于 php 的一个长度为 8 的字符串

但 Parameter 4: 类型不匹配 这第 4 个参数指的是他吗

应该是 sMsgCenterNo 吧?

这一点从改成 array($dSendTime) 后报错 Fatal error: Cannot pass parameter 5 by reference 也可佐证

搜索了一下,短信猫的相关说明

读取短消息 (ReadMsgByIndex)

功能描述:读取SIM卡中指定位置的短消息

参数: iIndexNo Integer 短信序号

sNo string 收到短信的来源号码

sCon string 收到短信的内容

sMsgCenterNo string 短信中心号码

dSendTime date 发送短信的时间

iSendTimeZone Integer 发送短信的时区

返回: Long 0 读取成功,其他 读取失败

dSendTime 是一个双精度数,对应于 php 的一个长度为 8 的字符串

但 Parameter 4: 类型不匹配 这第 4 个参数指的是他吗

应该是 sMsgCenterNo 吧?

这一点从改成 array($dSendTime) 后报错 Fatal error: Cannot pass parameter 5 by reference 也可佐证

小河几个参数应该怎样传才能正确呢?

$sMsgCenterNo

只是个字符串类型的参数,$dSendTime加上array后,报其他错,那应该说明开始是这个参数类型,只是还有其他问题

又测试了下

$sNo = "";

$sCon = "";

$MsgCenterNo = "+8613800200500";

$dSendTime=array();

$lTimeZone =0;

If($objSMS->ReadMsgByIndex(intval($Index), $sNo, $, $MsgCenterNo, $dSendTime,$lTimeZone) == 0)

//出现如下错误

b>Fatal error: Uncaught exception 'com_exception' with message 'Parameter 1: 类型不匹配。

第一个参数是短信序号,数字类型,怎么会提示参数1类型不对呢

你都给他们赋予做够长度的串

你都给他们赋予做够长度的串

php怎么定义字符串参数的长度?

我试了还是时间那个参数的问题,就是其他语言写的接口,参数为datetime类型,但在php里不知道怎么定义参数类型来传?

PHP调用COM,一般就是整形、字符串或者NULL。没有其它特殊类型。

本帖最后由 xuzuning 于 2013-06-10 19:26:48 编辑 dSendTime 空间对应于 php "\x00\x00\x00\x00\x00\x00\x00\x00"

你实际是传出,并非传入

dSendTime 空间对应于 php "\x00\x00\x00\x00\x00\x00\x00\x00"

你实际是传出,并非传入

是的,这是是输出参数,可是执行时总返回类型错误。其他语言很简单,php不知道怎么处理

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值