具体我在检测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.具体该如何解决????????????