php调用com组件的参数问题
$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。没有其它特殊类型。
dSendTime 空间对应于 php "\x00\x00\x00\x00\x00\x00\x00\x00"
你实际是传出,并非传入
dSendTime 空间对应于 php "\x00\x00\x00\x00\x00\x00\x00\x00"
你实际是传出,并非传入
是的,这是是输出参数,可是执行时总返回类型错误。其他语言很简单,php不知道怎么处理
推荐阅读
-
解决Python3 被PHP程序调用执行返回乱码的问题
-
PHP调用VC编写的COM组件实例
-
基于vue 添加axios组件,解决post传参数为null的问题
-
php用windows COM组件调用openoffice接口实现word转pdf文件时报错的解决办法
-
解决Python3 被PHP程序调用执行返回乱码的问题
-
接口的 COM 组件调用 QueryInterface 因以下错误而失败: 库没有注册。
-
php通过COM类调用组件的实现代码
-
win2003服务器使用WPS的COM组件的一些问题解决方法
-
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
-
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解