当前位置: 代码迷 >> Windows Mobile >> SmsSendMessage函数调用有关问题
  详细解决方案

SmsSendMessage函数调用有关问题

热度:210   发布时间:2016-04-25 08:00:56.0
SmsSendMessage函数调用问题。
拷贝了网上一个函数。但是始终发不出短信。SmsSendMessage函数返回的是一个负值-211...
是不是什么没有设置正确?
int   SendShortMessage(void)
{
SMS_HANDLE   smsHandle   =   NULL;
HRESULT   x=   SmsOpen(   SMS_MSGTYPE_TEXT,   SMS_MODE_SEND,   &smsHandle,   NULL   );
if   (   FAILED(   SmsOpen(   SMS_MSGTYPE_TEXT,   SMS_MODE_SEND,   &smsHandle,   NULL   )   )   ){
//MessageBox(   NULL,   _T(   "SmsOpen   Fail "   ),   _T(   "Send   Sms   Fail "   ),   MB_ICONINFORMATION   );
return   0;
}

SMS_ADDRESS   smsaSource;
SMS_ADDRESS   smsaDestination;

SMS_MESSAGE_ID   smsmidMessageID=0;
TEXT_PROVIDER_SPECIFIC_DATA   tpsd;

//smsaSource.smsatAddressType   =   SMSAT_INTERNATIONAL;
//_tcsncpy(   smsaSource.ptsAddress,   _T(   "+8613800871500 "   ),   SMS_MAX_ADDRESS_LENGTH   );

smsaDestination.smsatAddressType   =   SMSAT_INTERNATIONAL;
_tcsncpy(   smsaDestination.ptsAddress,   _T(   "+8613987555666 "   ),   SMS_MAX_ADDRESS_LENGTH   );

tpsd.dwMessageOptions   =   /*bSendConfirmation   ?   PS_MESSAGE_OPTION_STATUSREPORT   :   */PS_MESSAGE_OPTION_NONE;
tpsd.psMessageClass   =   PS_MESSAGE_CLASS1;
tpsd.psReplaceOption   =   PSRO_NONE;
//tpsd.dwHeaderDataSize   =   0;

LPCTSTR   lpszMessage   =   _T(   "1111111 "   );
HRESULT   h=   SmsSendMessage(   smsHandle,   NULL,   &smsaDestination,   NULL,
(   PBYTE   )lpszMessage,   _tcslen(   lpszMessage   )   *   sizeof(   TCHAR   ),   (   PBYTE   )&tpsd,
sizeof(   TEXT_PROVIDER_SPECIFIC_DATA   ),   SMSDE_OPTIMAL,   SMS_OPTION_DELIVERY_NONE,
&smsmidMessageID   )   ;
if   (   SUCCEEDED(   SmsSendMessage(   smsHandle,   NULL,   &smsaDestination,   NULL,
(   PBYTE   )lpszMessage,   _tcslen(   lpszMessage   )   *   sizeof(   TCHAR   ),   (   PBYTE   )&tpsd,
sizeof(   TEXT_PROVIDER_SPECIFIC_DATA   ),   SMSDE_OPTIMAL,   SMS_OPTION_DELIVERY_NONE,
&smsmidMessageID   )   )   )
{
//MessageBox(   NULL,   _T(   "ok "   ),   _T(   "sendsms "   ),   MB_ICONINFORMATION   );
}
else
{
//MessageBox(   NULL,   _T(   "Fail "   ),   _T(   "sendsms "   ),   MB_ICONINFORMATION   );
}
SmsClose(   smsHandle   );
return   0;
}

------解决方案--------------------
1:
if ( FAILED())的使用,不要重复用两次了,我的反正就没有用了
HRESULT x= SmsOpen( SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &smsHandle, NULL );
if ( FAILED( SmsOpen( SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &smsHandle, NULL ) ) )
这个只需要if( FAILED(x))就行了。下面还有一个if ( SUCCEEDED( SmsSendMessage.....
还有我用的发送长度为12,而不是sizeof( TEXT_PROVIDER_SPECIFIC_DATA )这个不知道有没有问题。
2:
不知道是不是问题,要对tpsd进行清理
memset( &tpsd, 0, sizeof(TEXT_PROVIDER_SPECIFIC_DATA) );
// Set up provider specific data
tpsd.dwMessageOptions = PS_MESSAGE_OPTION_NONE;
tpsd.psMessageClass = PS_MESSAGE_CLASS1;
tpsd.psReplaceOption = PSRO_NONE;
tpsd.dwHeaderDataSize = 0;
  相关解决方案