SmsDll.cpp
上传用户:wang776455
上传日期:2022-06-12
资源大小:4721k
文件大小:3k
源码类别:

手机短信编程

开发平台:

Visual C++

  1. // SmsDll.cpp : Defines the initialization routines for the DLL.
  2. //
  3. #include "stdafx.h"
  4. #include "SmsDll.h"
  5. #include "SmsTraffic.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. CSmsTraffic* m_pSmsTraffic;
  12. BOOL bIsOpenComm;
  13. //
  14. // Note!
  15. //
  16. // If this DLL is dynamically linked against the MFC
  17. // DLLs, any functions exported from this DLL which
  18. // call into MFC must have the AFX_MANAGE_STATE macro
  19. // added at the very beginning of the function.
  20. //
  21. // For example:
  22. //
  23. // extern "C" BOOL PASCAL EXPORT ExportedFunction()
  24. // {
  25. // AFX_MANAGE_STATE(AfxGetStaticModuleState());
  26. // // normal function body here
  27. // }
  28. //
  29. // It is very important that this macro appear in each
  30. // function, prior to any calls into MFC.  This means that
  31. // it must appear as the first statement within the 
  32. // function, even before any object variable declarations
  33. // as their constructors may generate calls into the MFC
  34. // DLL.
  35. //
  36. // Please see MFC Technical Notes 33 and 58 for additional
  37. // details.
  38. //
  39. /////////////////////////////////////////////////////////////////////////////
  40. // CSmsDllApp
  41. BEGIN_MESSAGE_MAP(CSmsDllApp, CWinApp)
  42. //{{AFX_MSG_MAP(CSmsDllApp)
  43. // NOTE - the ClassWizard will add and remove mapping macros here.
  44. //    DO NOT EDIT what you see in these blocks of generated code!
  45. //}}AFX_MSG_MAP
  46. END_MESSAGE_MAP()
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CSmsDllApp construction
  49. CSmsDllApp::CSmsDllApp()
  50. {
  51. // TODO: add construction code here,
  52. // Place all significant initialization in InitInstance
  53. if(OpenComm("COM1", 115200) == FALSE)
  54.     {
  55.         CString strError;
  56.         strError = "无法打开串口1! ";
  57. //        MessageBox(strError, "警告", MB_OK);
  58.         bIsOpenComm = FALSE;
  59. return;
  60.     }
  61.     else
  62.     {
  63.         m_pSmsTraffic = new CSmsTraffic;
  64. bIsOpenComm = TRUE;
  65.     }
  66. }
  67. /////////////////////////////////////////////////////////////////////////////
  68. // The one and only CSmsDllApp object
  69. CSmsDllApp theApp;
  70. void SmsSend(CString centerNumber, CString mobileNo, CString message, char mode)
  71. {
  72. CString strSmsc;
  73. CString strNumber;
  74. CString strContent;
  75.     strSmsc = centerNumber;
  76. strNumber = mobileNo;
  77. strContent = message;
  78. // 检查号码
  79. if(strNumber.GetLength() < 11)
  80. {
  81. // ShowMessage("请输入正确的号码!");
  82. return;
  83. }
  84. // 检查短消息内容是否空,或者超长
  85. CString strUnicode;
  86. WCHAR wchar[1024];
  87. int nCount = ::MultiByteToWideChar(CP_ACP, 0, strContent, -1, wchar, 1024);
  88. if(nCount <= 1)
  89. {
  90. // ShowMessage("请输入消息内容!");
  91. return;
  92. }
  93. else if(nCount > 70) // 我们决定全部用UCS2编码,最大70个字符(半角/全角)
  94. {
  95. // ShowMessage("消息内容太长,无法发送!");
  96. return;
  97. }
  98. SM_PARAM SmParam;
  99. ::memset(&SmParam, 0, sizeof(SM_PARAM));
  100. // 去掉号码前的"+"
  101. if(strSmsc[0] == '+')  strSmsc = strSmsc.Mid(1, strSmsc.GetLength()-1);
  102. if(strNumber[0] == '+')  strNumber = strNumber.Mid(1, strNumber.GetLength()-1);
  103. // 在号码前加"86"
  104. if(strSmsc.Mid(0,2) != "86")  strSmsc = "86" + strSmsc;
  105. if(strNumber.Mid(0,2) != "86")  strNumber = "86" + strNumber;
  106. // 填充短消息结构
  107. ::strcpy(SmParam.SCA, strSmsc);
  108. ::strcpy(SmParam.TPA, strNumber);
  109. ::strcpy(SmParam.TP_UD, strContent);
  110. SmParam.TP_PID = 0;
  111. //? SmParam.TP_DCS = GSM_7BIT;
  112. //? SmParam.TP_DCS = GSM_8BIT;
  113. SmParam.TP_DCS = GSM_UCS2;    
  114.     SmParam.mode = mode;
  115. // 发送短消息
  116. m_pSmsTraffic->PutSendMessage(&SmParam);
  117. }