我在做这方面的工作,要求:MODEM自动应答,连接后传输数据!!!!
请问哪位兄弟能帮帮我啊????我现在在做,可不尽人意,能拨号与连接了,但有时消息检测不到!!!
请问哪位兄弟能帮帮我啊????我现在在做,可不尽人意,能拨号与连接了,但有时消息检测不到!!!
解决方案 »
- 验证一个未经验证的BP神经网络的算法的正确性?
- Dll工程使用HOOK, 主程序退出后提示DLL仍被占用, 不知道与HOOK是否有关
- 这样的静态连接库错误是怎么回事哦?
- 升两星,散分!
- 能不能用VC生成可以在纯DOS下运行的程序?如何生成?
- ftp命令 list返回的文件信息的格式有哪几种阿?
- 初学vc,请各位高手提点建议,谢谢!
- 关于CArchive类的
- 我想改变编辑框控件的字体大小,重载了ONCREATE函数,用SETFONT设置字体,可字体怎么没改变啊??
- 100分请教(不够再给分),vc中如何通过VBA的功能调用操作.doc文件,如通过VC代码打开word并打开该文件,打印文件并关闭文件??
- 哈哈,高兴,大家来看看我们的龙芯
- 有什么办法可以截获通过网卡的数据
[email protected]
[email protected]
[email protected]
[email protected]
我用了两种方法:
1:
LPVARSTRING lpVarStringStruct = NULL;
size_t sizeofVarStringStruct = sizeof( VARSTRING ) + 1024;
long lreturn;
// get the comm handle. Be sure to drop this handle when
// the call is done or you'll get device unavailable errors
// and have to REBOOT!
lpVarStringStruct = ( LPVARSTRING )LocalAlloc( 0, sizeofVarStringStruct );
do
{
memset( lpVarStringStruct, 0, sizeofVarStringStruct );
lpVarStringStruct->dwTotalSize = (DWORD)sizeofVarStringStruct;
lreturn = lineGetID( 0, 0, (HCALL)m_dwDevice, LINECALLSELECT_CALL, lpVarStringStruct, "comm/datamodem" );
} while( lreturn != 0 );
//
// get comm device handle and save it to properties area
m_hComm = *( (LPHANDLE )( ( LPBYTE )lpVarStringStruct + lpVarStringStruct->dwStringOffset ) );
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = 5000;
CommTimeOuts.ReadTotalTimeoutMultiplier = 5000;
CommTimeOuts.ReadTotalTimeoutConstant = 5000;
CommTimeOuts.WriteTotalTimeoutMultiplier = 5000;
CommTimeOuts.WriteTotalTimeoutConstant = 5000;
SetCommTimeouts(m_hComm,&CommTimeOuts);
//
// tell main dialog we got through
::SendMessage(m_hWnd, WM_TAPI_CONNECT, TAPI_LINECALLSTATE_CONNECTED, (LPARAM)(HANDLE)m_hComm );
LocalFree( lpVarStringStruct ); // drop mem space2:
typedef struct tagModemID{
HANDLE hModem;
char ModemName[1];
}ModemID;
VARSTRING * str;
LONG lid;
DWORD size;
char =1;
ModemID *mid;
str=(VARSTRING *)malloc(sizeof(VARSTRING));
if(!str)
return NULL;
str->dwTotalSize=sizeof(VARSTRING);
do
{ if((lineGetID(m_hLine,0,NULL,LINECALLSELECT_LINE,str,"comm/datamodem")==0)
&&(str->dwTotalSize < str-> dwNeededSize))
{
DWORD dwSize=str->dwNeededSize;
free(str);
str=(VARSTRING *)malloc(dwSize);
if(!str)
{
m_hComm=NULL;
=2;
}
str->dwTotalSize=dwSize;
}
else
=0;
}while(==1); if(==0)
{
//m_hComm=(HANDLE)((LPSTR)str+str->dwStringOffset);
mid=(ModemID*)((LPSTR)str+str->dwStringOffset);
m_hComm=mid->hModem;
} free(str);
可用以上两种方法得到的句柄都读写串口不成功,也就是读不到数据,也写不出数据!
有哪位大虾来帮我啊!!!!
你可以先Or上linecallprivilege_owner优先级再试试.退一步说,如果你的lineGetID检索到的modem句柄还是NULL,也不用怕,可以用它返回的Modem名字(CommID结构中第二个字段)传入CreateFile来直接打开Modem,用于Read/WriteFile.由于是modem不是磁盘文件,别忘记在这个名字前加上\\.\的前缀.
{
ModemID far *mid;
VARSTRING * str;
// LONG lid;
DWORD dwSize;
char =1;
str=(VARSTRING *)malloc(sizeof(VARSTRING));
if(!str) return;
if(!hLine)return ;
str->dwTotalSize=sizeof(VARSTRING);
do
{
if((lineGetID(hLine,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;
=2;
}
str->dwTotalSize=dwSize;
}
else =0;
}while(==1);
if(==0)
{
mid=(ModemID far *)((LPSTR)str+str->dwStringOffset);
myhModem=mid->hModem;
}
free(str);
}其中:
typedef struct tagModemID{
HANDLE hModem;
char ModemName[1];
}ModemID;
http://www.csdn.net/expert/topic/829/829405.xml?temp=.5950891
按上面的方法取得句柄是有效的,我用的是第二种方法,
但使用句柄要在系统发出了LINECALLSTATE_CONNECTED以后!