📄 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 + -