?? readme.txt
字號:
========================================================================
MICROSOFT FOUNDATION CLASS LIBRARY : Sms
========================================================================
2002-11-25
目前設計的dll接口的輸入函數中沒有com端口號的功能,以后可能加上.
今天寫好了第一個全局導出函數
extern "C" __declspec(dllexport) int GetGprsStatus()
因為設定了一個全局變量CSmsDlg dlg,在dll加載的時候就初始化dlg,
即BOOL CSmsApp::InitInstance(),而且用dlg.Create(),而沒有用dlg.Domodal(),
把對話框模板IDD_MODEMCONNET_DIALOG的屬性Visiable改為false,實現隱含dlg.
========================================================================
2002-11-26
今天寫好了第二個全局導出函數
extern "C" __declspec(dllexport) int SendShortMessage(char *Number, int NumberLen, char *Message, int MessageLen)
其中char* Number 表示目標手機號碼指針, int NumberLen 表示手機號碼的長度,中國大陸為11位,程序中只允許這個數字,否則return 2;
char *Message 表示短信的內容指針, int MessageLen 表示短信內容的長度,不能超過70個字符(中英文都可以,程序中采用Unicode方式)
70個字符占用70*2=140個字節.如果長度超過70個,函數返回3;如果發送成功,返回100.
目前存在的問題: 當dll退出時無法關閉隱含的dlg.
當在CSmsDlg中聲明析構函數~CSmsDlg并且添加處理函數如下:
CSmsDlg::~CSmsDlg()
{
if(m_Com.GetPortOpen()) m_Com.SetPortOpen(FALSE);
}
原來退出應用程序后產生的error消息框都消失了.
總之,Window2000對待exe和dll有所不同.
目前問題:如果中文和英文混合輸入,則無法用該dll發送.
========================================================================
2002-11-27
今天繼續測試了dll,并且修改了幾個地方
首先解決昨天的問題,把CSmsDlg::SmsContent()去掉,分為兩個函數int CSmsDlg::SmsConvertPDU()和
void CSmsDlg::SmsPDU(),前者用來把用戶的短信內容char* message 改為PDU模式下的幀格式(包括所有字符都使用Unicode的轉化)
后者用于當收到端口發送的'>'時,發送PDU.這樣即使用戶中英文混合輸入也可以自動識別.
原來App初始化時BOOL CSmsApp::InitInstance()創建MSComm代碼改到了GetGprsStatus()中.并把這個導出函數的名字改為OpenGprs().
而且添加了一個全局變量Mobile用于標記用戶是否打開該dll,如果沒有,則Mobile=0;否則>0.
添加了第三個函數CloseMobile用來關閉dll,即extern "C" __declspec(dllexport) int CloseMobile()
它的操作有:首先關閉端口,然后關閉dlg,最后設置Mobile = 0.
========================================================================
2002-11-28
最終確定了dll的三個導出函數,如下:
extern "C" __declspec(dllexport) int OpenGprs()
extern "C" __declspec(dllexport) int SendShortMessage(char *Number, int NumberLen, char *Message, int MessageLen)
extern "C" __declspec(dllexport) int CloseGprs()
并且在CloseGprs()中添加了如果用戶沒有使用OpenGprs()就關閉Gprs的保護代碼
如果發送一條短信,那么從端口建立-->發送短信-->關閉端口,這個流程完全寫在一個函數SendShortMessage中
每個中間過程都需要時間的延遲.
========================================================================
2002-11-29
最終確定了dll的兩個個導出函數,如下:
extern "C" __declspec(dllexport) int GetStatus()
extern "C" __declspec(dllexport) int SendShortMessage(char *Number, int NumberLen, char *Message, int MessageLen)
GetStatus 每次返回ready
SendShortMessage 完成初始化dlg類,初始化端口,發送AT命令,發送短信,關閉端口,銷毀dlg類,一般不超過5秒.
========================================================================
2002-11-30
進一步測試dll,并且成功的捕獲了一個端口操作的異常
當端口被其它應用獨占時,用dlg.m_Com.SetPortOpen()是無法打開這個端口的,會拋出device is busy
的操作系統消息框(窗口),用try{} catch{};捕獲后,dlg.DestroyWindow()并返回給SendShortMessage()=1的值,表示busy.
而用dlg.m_Com.GetPortOpen()始終返回FALSE.
把全局變量dlg改為SendShortMessage()的局部變量,禁止外部訪問.
增加了一個功能:定位Sim卡的短信中心,這樣程序可以用于國內聯通和移動的手機(它們有不同的短信中心號碼)
把在PDU數據幀發送時的默認短信中心號碼改為讀取SIM卡芯片的信息,然后配置PDU的SCA element
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -