📄 main.~cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include "tapi.h"
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TmyDecFrame *myDecFrame;//
TmyDecFrame *pwin=NULL;// 主 窗 口 指 针
char RecBuf[20],buf[20];// 缓 冲 区
DWORD Error; // 错 误 码
COMSTAT Status; // 状 态 码
DWORD NumLine; // 允 许 使 用 的 线 路 设 备 数
LINECALLPARAMS para;// 呼 叫 参 数
HLINEAPP myhTapi;// 线 路 应 用 程 序 句 柄
HLINE myhLine;// 线 路 句 柄
HANDLE myhModem;// 调 制 解 调 器 句 柄
HCALL myhCall;// 呼 叫 句 柄
typedef struct tagModemID{
HANDLE hModem;
char ModemName[1];
}ModemID;
//---------------------------------------------------------------------------
//获 取 调 制 解 调 器 句 柄 的 函 数 定 义
void GethModem(HLINE hLine)
{
ModemID far *mid;
VARSTRING * str;
LONG lid;
DWORD dwSize;
char mark=1;
str=(VARSTRING *)malloc(sizeof(VARSTRING));
if(!str)
return;
str->dwTotalSize=sizeof(VARSTRING);
do
{
if((lineGetID(myhLine,0,NULL,LINECALLSELECT_LINE,str,
"comm/datamodem")==0)&&(str->dwTotalSize < str->dwNeededSize))
{
dwSize=str->dwNeededSize;
free(str);
str=(VARSTRING *)malloc(dwSize);
if(!str)
{
myhModem=NULL;
mark=2;
}
str->dwTotalSize=dwSize;
}else{
mark=0;
}
}while(mark==1);
if(mark==0)
{
mid=(ModemID far *)((LPSTR)str+str->dwStringOffset);
myhModem=mid->hModem;
}
free(str);
}
//---------------------------------------------------------------------------
__fastcall TmyDecFrame::TmyDecFrame(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TmyDecFrame::FormCreate(TObject *Sender)
{
//---- 4 在 主 窗 口 初 始 化 函 数 中 加 入 对 线 路 的 初 始 化 过 程:
pwin=this;// 获 得 主 窗 口 指 针
/* while(lineInitializeEx(&myhTapi,NULL,
(LINECALLBACK)MakeProcInstance((FARPROC)lpfnCallback,
GetModule()->GetInstance()), "TRY",&NumLine )==LINEERR_REINIT)
{
sleep(1);// 延 迟
};
*/
Error=lineOpen(myhTapi,0,&myhLine,0x10004,0,0,LINECALLPRIVILEGE_MONITOR+
LINECALLPRIVILEGE_OWNER,LINEMEDIAMODE_DATAMODEM,NULL);
if(Error!=0)
{
sprintf(buf,"%lx",Error);
Application->MessageBox(buf, 0, MB_OK);
}else{
GethModem(myhLine);// 取 得myhModem 的 值
if(myhModem!=NULL)
{
para.dwBearerMode=LINEBEARERMODE_VOICE;
para.dwMediaMode=LINEMEDIAMODE_DATAMODEM;
para.dwTotalSize=sizeof(LINECALLPARAMS);
Error=lineMakeCall(myhLine,&myhCall,"8880751",0,¶);
if(Error!=0)
{
sprintf(buf,"%lx",Error);
Application->MessageBox(buf, 0, MB_OK);
}
}
}
}
//---------------------------------------------------------------------------
/*void __fastcall TmyDecFrame::lpfnCallback(DWORD hDevice, DWORD dwMsg,
DWORD dwCallbackInstance,DWORD dwParam1, DWORD dwParam2,DWORD dwParam3)//
//参数定义同lineCallbackFunc函数中的参数定义
{
int Rec_num=0;
switch(dwParam1)
{
case LINECALLSTATE_CONNECTED:
DWORD len;
ClearCommError(myhModem,&Error,&Status);
Rec_num=Status.cbInQue;
ReadFile(myhModem,RecBuf,Rec_num,&len,0);
//至此已经为数据通信做好了前期准备,可设立标志
WriteFile(myhModem,"Success",7,&len,0);
ReadFile(myhModem,RecBuf,8,&len,0);
Application->MessageBox(RecBuf,0,MB_OK);
break;
case LINECALLSTATE_IDLE:
lineDeallocateCall(myhCall);
break;
case LINECALLSTATE_DISCONNECTED:
lineClose(myhLine);
lineShutdown(myhTapi);
break;
}
} */
//---------------------------------------------------------------------------
void __fastcall TmyDecFrame::lpfnCallback(DWORD hDevice, DWORD dwMsg,
DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2,DWORD dwParam3)
{
int Rec_num=0;
switch(dwParam3)
{
case LINECALLPRIVILEGE_OWNER:
myhCall=(HCALL)hDevice;
break;
}//只有对呼叫具有私有特权的调用者才能应答呼叫,在此获得呼叫句柄
switch(dwParam1)
{
case LINECALLSTATE_CONNECTED:
DWORD len;
ClearCommError(myhModem,&Error,&Status);
Rec_num=ComS.cbInQue;
ReadFile(myhModem,RecBuf,Rec_num,&len,0);// 清 除 接 收 缓 冲 区
ReadFile(myhModem,RecBuf,7,&len,0);
WriteFile(myhModem,"Received",8,&len,0);
Application->MessageBox(RecBuf,0,MB_OK);
break;
case LINECALLSTE_OFFERING:
lineAnswer(myhCall,NULL,0);
break;// 完 成 自 动 应 答
case LINECALLSTATE_IDLE:
lineDeallocateCall(myhCall);
break;
case LINECALLSTATE_DISCONNECTED:
lineClose(myhLine);
lineShutdown(myhTapi);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -