仿照sdk里面的发短信的例程,改写了一段代码,遇到了问题

polestar707   2009-3-5 14:20 楼主
仿照sdk里面的发短信的例程,改写了一段代码,不知道怎么回事,总是发送不成功,请高手帮我看看 问题出在哪?

  1. SMS_HANDLE smshHandle;
  2.         SMS_ADDRESS smsaSource;
  3.         SMS_ADDRESS smsaDestination;
  4.         TEXT_PROVIDER_SPECIFIC_DATA tpsd;
  5.         SMS_MESSAGE_ID smsmidMessageID;


  6.         BOOL bRetVal=FALSE;
  7.         LPCTSTR lpszRecipient;
  8.         LPCTSTR lpszMessage;
  9.         UpdateData();
  10.         lpszRecipient=m_receiver;
  11.         lpszMessage=m_msg;

  12.         // try to open an SMS Handle
  13.         if(FAILED(SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &smshHandle, NULL)))
  14.         {
  15.                 //return bRetVal;
  16.                 bRetVal=FALSE;
  17.         }

  18.         // Create the destination address
  19.         smsaSource.smsatAddressType = SMSAT_NATIONAL;
  20.         smsaDestination.smsatAddressType = SMSAT_NATIONAL;  

  21.         _tcsncpy(smsaDestination.ptsAddress, lpszRecipient, SMS_MAX_ADDRESS_LENGTH);

  22.         // Set up provider specific data
  23.         memset(&tpsd, 0, sizeof(tpsd));
  24.         tpsd.dwMessageOptions = PS_MESSAGE_OPTION_NONE;
  25.         tpsd.psMessageClass = PS_MESSAGE_CLASS1;
  26.         tpsd.psReplaceOption = PSRO_NONE;
  27.         tpsd.dwHeaderDataSize = 0;

  28.         // Send the message, indicating success or failure
  29.         if(SUCCEEDED(SmsSendMessage(smshHandle, NULL,
  30.                 &smsaDestination, NULL, (PBYTE) lpszMessage,
  31.                 _tcslen(lpszMessage) * sizeof(TCHAR), (PBYTE) &tpsd,
  32.                 sizeof(TEXT_PROVIDER_SPECIFIC_DATA), SMSDE_OPTIMAL,
  33.                 SMS_OPTION_DELIVERY_NONE, &smsmidMessageID)))
  34.         {
  35.                 bRetVal = TRUE;
  36.                 AfxMessageBox(_T("Send SMS succussful!"));
  37.         }
  38.         else
  39.         {
  40.                 bRetVal = FALSE;
  41.         }
  42.         // clean up
  43.         VERIFY(SUCCEEDED(SmsClose(smshHandle)));

回复评论 (5)

参数问题
点赞  2009-3-5 14:26
BOOL SendSMS(LPCTSTR lpszRecipient, LPCTSTR lpszMessage)
{
    BOOL bRetVal = FALSE;

    SMS_HANDLE smshHandle;
    SMS_ADDRESS smsaSource;
    SMS_ADDRESS smsaDestination;
    TEXT_PROVIDER_SPECIFIC_DATA tpsd;
    SMS_MESSAGE_ID smsmidMessageID;

    // try to open an SMS Handle
    if(FAILED(SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &smshHandle, NULL)))
    {
        return bRetVal;
    }

    // Create the destination address
    smsaSource.smsatAddressType = SMSAT_UNKNOWN;   
    smsaDestination.smsatAddressType = SMSAT_UNKNOWN;  

    _tcsncpy(smsaDestination.ptsAddress, lpszRecipient, SMS_MAX_ADDRESS_LENGTH);

    // Set up provider specific data
    memset(&tpsd, 0, sizeof(tpsd));
    tpsd.dwMessageOptions = PS_MESSAGE_OPTION_NONE;
    tpsd.psMessageClass = PS_MESSAGE_CLASS1;
    tpsd.psReplaceOption = PSRO_NONE;
    tpsd.dwHeaderDataSize = 0;

    // Send the message, indicating success or failure
    if(SUCCEEDED(SmsSendMessage(smshHandle, NULL,
        &smsaDestination, NULL, (PBYTE) lpszMessage,
        _tcslen(lpszMessage) * sizeof(TCHAR), (PBYTE) &tpsd,
        sizeof(TEXT_PROVIDER_SPECIFIC_DATA), SMSDE_OPTIMAL,
        SMS_OPTION_DELIVERY_NONE, &smsmidMessageID)))
    {
        bRetVal = TRUE;
    }
    else
    {
        bRetVal = FALSE;
    }

    // clean up
    SmsClose(smshHandle);

    return bRetVal;
}
点赞  2009-3-5 14:28
可是 我用了UNKOWN也不行啊???
高手啊 帮帮菜鸟吧
点赞  2009-3-5 16:05
我以前用的是 smsAddrDestination.smsatAddressType = SMSAT_INTERNATIONAL; 发中文字符应该要用这个参数吧,具体得查下msdn文档。
另外短信发不出去的原因有很多的,你需要根据SmsSendMessage返回的错误码去查找原因,每个错误码在msdn上都有明确的错误描述。
点赞  2009-3-5 16:30
……
用你的代码就可以了
唉 高手就是高手啊
点赞  2009-3-5 16:30
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复