故障代码是8001010d,描述为因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫
htong 2008-10-29 04:03:17 具体我在检测USB的消息函数中,加入BOOL CVIA_ESNWRITERDlg::TestMobilePhoneCommunication()这个函数,作用是给手机发一条命令测试,用来测试手机跟执行程序间有没有建立连接的函数.但是执行出现问题.单单执行TestMobilePhoneCommunication()是可以的.具体函数体如下:
LRESULT CVIA_ESNWRITERDlg::OnMyDeviceChange(WPARAM wParam, LPARAM lParam)
{
if ( DBT_DEVICEARRIVAL == wParam || DBT_DEVICEREMOVECOMPLETE == wParam )
{
PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR)lParam;
//PDEV_BROADCAST_DEVICEINTERFACE pDevInf;
//PDEV_BROADCAST_HANDLE pDevHnd;
//PDEV_BROADCAST_OEM pDevOem;
//PDEV_BROADCAST_PORT pDevPort;
//PDEV_BROADCAST_VOLUME pDevVolume;
switch( pHdr->dbch_devicetype )
{
case DBT_DEVTYP_DEVICEINTERFACE:
//pDevInf = (PDEV_BROADCAST_DEVICEINTERFACE)pHdr;
if (!TestMobilePhoneCommunication())
GetDlgItem(IDC_STATIC_RED)->ShowWindow(TRUE);
else
GetDlgItem(IDC_STATIC_GREEN)->ShowWindow(TRUE);
break;
/* case DBT_DEVTYP_HANDLE:
pDevHnd = (PDEV_BROADCAST_HANDLE)pHdr;
break;
case DBT_DEVTYP_OEM:
pDevOem = (PDEV_BROADCAST_OEM)pHdr;
break;*/
case DBT_DEVTYP_PORT:
//pDevPort = (PDEV_BROADCAST_PORT)pHdr;
break;
/* case DBT_DEVTYP_VOLUME:
pDevVolume = (PDEV_BROADCAST_VOLUME)pHdr;
break;*/
}
}
return 0;
}
BOOL CVIA_ESNWRITERDlg::TestMobilePhoneCommunication()
{
CString strCmd, strExpect;
BOOL status;
strCmd.Format("ETS, Id=CP Loopback, Data=0x29");
strExpect.Format("ETS, Id=CP Loopback, Data=0x29");
status=this->common.SendCommandToCP(strCmd);
if (!status)
{
strcpy(m_error.ErrorMsg,"The viaif handle is null)!\n");
return FALSE;
}
status=this->common.GetResponseFromCP(2,strExpect);
if (!status)
{
strcpy(m_error.ErrorMsg,"the communication is disaconnect)!\n");
return FALSE;
}
return TRUE;
}
BOOL CCommon::SendCommandToCP(CString cmdStr)
{
HRESULT hr; //IViaInterface
try
{
BSTR commd;
commd = cmdStr.AllocSysString();
if (m_pViaIf>0)
hr = m_pViaIf->SendCommand( commd );
else
{
strcpy(m_error.ErrorMsg,"m_pViaIf is null");
return FALSE;
}
SysFreeString(commd);
CHECK_VIAIF( hr, "Send Command:' " + cmdStr);
}
catch ( CString & error )
{
IErrorInfo *pInfo;
hr = GetErrorInfo( 0, &pInfo );
BSTR bstr;
pInfo->GetDescription( &bstr );
CString tmp = bstr;
CString str = error + "'\n" + tmp;
//Error.ErrorCode = EtsRunError+EtsSendCommandError;
strcpy(m_error.ErrorMsg,str);
SysFreeString(bstr);
}
return TRUE;
}
问题出现在hr = m_pViaIf->SendCommand( commd );这个地方返回值不正确,值为8001010d.具体该如何解决????????????