//发送短信息
function TModem.SendMsg(Msg,Dst : string;CHS : boolean): Boolean;
var
strTmp,smsType,sMsgCode : ansistring;
sDstCode,sOaCode : string;
iLen : integer; //短信长度
sToSend : ansistring;
begin
result := true;
sMsgCode := Ecode(Msg,CHS);
strTmp := copy(self.SMSC,2,13);
if strTmp='' then
begin
result :=false;
exit;
end;
sOaCode:= encodebcd(strTmp); //对手机号编码
sToSend := '0891' + sOaCode + '11000B91';
strTmp :='';
sDstCode :='';
sDstCode := encodebcd(Dst);
sToSend := sToSend + sDstCode;
//0008 为中文信息,0000为英文信息
if CHS then //中文信息
smsType :='0008'
else
smsType := '0000';
sToSend := sToSend + smsType;
sToSend := sToSend + '8F';
//短信有效时间 8f=12hr
iLen := length(Msg); //字节长度
strTmp := inttohex(iLen,2);
//strTmp := '04';
sToSend := sToSend + strTmp;
sToSend := sToSend + sMsgCode;
sToSend := sToSend + #26#13#10;
iLen := (28+length(Msg)*2) div 2; //iLen 也是指字节长度
fMscomm.Output := CN_CMGS + inttostr(iLen);
fMscomm.Output := EN_RETURN;
if AnalyzeModemResponseCode<>MODEM_READY_RETURN then
begin
result :=false;
exit;
end;
sleep(20);
fMscomm.Output := sToSend;
if AnalyzeModemResponseCode<>MODEM_OK_RETURN then
begin
result := false;
exit;
end;
end;
为什么程序运行到strTmp := inttohex(iLen,2);时总出内存访问错误,如果改成strTmp := '04';那下面的sToSend := sToSend + #26#13#10;又出同样的错误?
帮帮我,着个该死的问题已经折磨了我2个星期了.
function TModem.SendMsg(Msg,Dst : string;CHS : boolean): Boolean;
var
strTmp,smsType,sMsgCode : ansistring;
sDstCode,sOaCode : string;
iLen : integer; //短信长度
sToSend : ansistring;
begin
result := true;
sMsgCode := Ecode(Msg,CHS);
strTmp := copy(self.SMSC,2,13);
if strTmp='' then
begin
result :=false;
exit;
end;
sOaCode:= encodebcd(strTmp); //对手机号编码
sToSend := '0891' + sOaCode + '11000B91';
strTmp :='';
sDstCode :='';
sDstCode := encodebcd(Dst);
sToSend := sToSend + sDstCode;
//0008 为中文信息,0000为英文信息
if CHS then //中文信息
smsType :='0008'
else
smsType := '0000';
sToSend := sToSend + smsType;
sToSend := sToSend + '8F';
//短信有效时间 8f=12hr
iLen := length(Msg); //字节长度
strTmp := inttohex(iLen,2);
//strTmp := '04';
sToSend := sToSend + strTmp;
sToSend := sToSend + sMsgCode;
sToSend := sToSend + #26#13#10;
iLen := (28+length(Msg)*2) div 2; //iLen 也是指字节长度
fMscomm.Output := CN_CMGS + inttostr(iLen);
fMscomm.Output := EN_RETURN;
if AnalyzeModemResponseCode<>MODEM_READY_RETURN then
begin
result :=false;
exit;
end;
sleep(20);
fMscomm.Output := sToSend;
if AnalyzeModemResponseCode<>MODEM_OK_RETURN then
begin
result := false;
exit;
end;
end;
为什么程序运行到strTmp := inttohex(iLen,2);时总出内存访问错误,如果改成strTmp := '04';那下面的sToSend := sToSend + #26#13#10;又出同样的错误?
帮帮我,着个该死的问题已经折磨了我2个星期了.
sToSend := sToSend + #26#13#10;
语句本身没问题。
不知是什么“内存访问错误”?
我也很想知道原因。
期待......