拷贝了网上一个函数。但是始终发不出短信。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;