该问题无解吗?(SOS)(100分)

  • 主题发起人 主题发起人 agangr
  • 开始时间 开始时间
A

agangr

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用TAPI+Modem来拨打一组传呼,因为是一路线,
所以在拨打下一个传呼之前,必须确定上一个传呼
已经拨打出去(即线路已经释放出来,当然不能强制挂断,因为有可能上个连接没结束)[red][/red]
但是我如何来判断呢?

我上了很多论坛,大家都没提出解决办法,难道用这种方法不能实现吗?
 
这中方法绝对可以实现,判断忙音不就行了!!!
 
董事长同志,说说怎么判断可以吗
 
LINECALLSTATE_BUSY
 
踢一脚。
 
to 我是董事长:
我有个问题请教一下,我已经花了很长时间了,可还没好的解决办法,我有一个
故障检测的传呼自动报警系统,大概的设计思路是:将有故障的点存入一个数据表中,
每隔一段时间就去检测打传呼报警,我将这个过程写在一个Timer事件中(为了实现
每隔一段时间就去检测打传呼报警),然后扫描表,当遇到第一个报警点,进行报警,
依次循环。。。。,为了确保在进行下一个点报警之前,头一个传呼已经打出,我需要
等待异步呼叫返回处理函数中LINECALLSTATE_Disconnected状态返回。但是我发现,
如果我等待,即在返回之前,我不让记录移动到下一条,将不会触发异步呼叫
返回处理函数,只有等到循环结束,才能触发,这是为什么?有没好的建议???
我的程序结构如下:
procedure TfrmTAPICall.Timer1Timer(Sender: TObject);
var
c: array[0..30] of char;
str:string;
begin
table1.First;
while not table1.Eof do
begin
str:=table1.Fields[2].AsString+',,,,,,,'+table1.Fields[4].AsString ;
StrPCopy(c, str);
if lineMakeCall(line, call, c, 0, @CallParams) < 0 then
Memo1.Lines.Add('Error in lineMakeCall');
if s='Disconnected: ' then
table1.Next;
end;
end;
end;




 
程序结构有问题,肯定不能这样等待,用一个状态就可解决问题。
procedure MakeCall;
begin
lineMakeCall(line, call, c, 0, @CallParams) < 0 ;
SendOk := False ;
end ;
procedure TfrmTAPICall.Timer1Timer(Sender: TObject);
begin
if SendOk then
begin
Table1.Next ;
MakeCall ;
end ;
end ;


在CallBack函数里面

LINECALLSTATE_IDLE : SendOk := True ;
LINECALLSTATE_DISCONNECTED :SendOk := True ;

不行包赔!
 
to 我是董事长:
非常遗憾,还是有问题,主要是第一次拨出后(确实也拨出),收到
LINECALLSTATE_IDLE : SendOk := True ;
LINECALLSTATE_DISCONNECTED :SendOk := True ;
两个状态,再次调用makecall;传呼也没有拨打出(modem无任何动作),收到callback函数
返回的 reply_error错!我的callback函数如下:


procedure lineCallback(hDevice, dwMsg, dwCallbackInstance,
dwParam1, dwParam2, dwParam3: LongInt);
{$IFDEF WIN32}
stdcall;
{$ELSE}
export;
{$ENDIF}
var
s: string;
hCall: THCall;
begin
if dwMsg = LINE_REPLY then
{ result of LineMakeCall }
begin
if dwParam2 < 0 then
begin
frmTAPICall.Memo1.Lines.Add('Reply error');
end
else
frmTAPICall.Memo1.Lines.Add('LINE_REPLY ok')
end
else
if dwMsg = LINE_CALLSTATE then { change in line state }
begin
hCall := THCall(hDevice);
case dwParam1 of
LINECALLSTATE_IDLE:
sendok:=true;
LINECALLSTATE_DISCONNECTED: { disconnected }
SendOk := True ;
end;
end;

end;


 
调用lineDrop了吗?
 
董事长,问题基本解决,我改成:
LINECALLSTATE_IDLE:
if hCall<>0 then
lineDealLocateCall(hCall)
sendok:=true;
后,现在比较正常,谢谢你,有问题再向你请教哈,先送100大洋:)
 
多人接受答案了。
 
后退
顶部