基于MFC与阿里云制作简易发送短信
***~~
做到最后可能会只是不能识别汉字,但是能识别英文和数字,有待改进的地方`
`
~~ ***
# 详细步骤见如下
一. 新建一个MFC项目:打开VS2013,文件->新建->项目
这里选择“基于对话框”
二. 在工具箱下添加如下控件
三. 双击”打开文件“,进入。cpp代码编写页面,填入以下代码:
Book* book = xlCreateXMLBook();if (!book){MessageBox(L"failed1");return;}book->load(L"Data2.xlsx");if (!book->load(L"Data2.xlsx")){MessageBox(L"failed2");return;}Sheet* sheet = book->getSheet(0);if (!sheet){MessageBox(L"failed3");return;}int rowfirst = sheet->firstRow();int rowlast = sheet->lastRow();int colfirst = sheet->firstCol();int collast = sheet->lastCol();for (int i = rowfirst + 1; i < rowlast; ++i){CString serial = sheet->readStr(i, 0);//CString address = sheet->readNum(i, 1);double number = sheet->readNum(i, 1);CString ttt;ttt.Format(L"%.0lf", number);CString project = sheet->readStr(i, 2);CString time = sheet->readStr(i, 3);CString gread = sheet->readStr(i, 4);CString address = sheet->readStr(i, 5);mList1.InsertItem(i - 1, serial);//开辟一个行,并且设置行的内容为i的内容mList1.SetItemText(i - 1, 1, ttt);//i代指在第几行插入数据,第二个参数代指第几列,第三个参数代指插入数据的值mList1.SetItemText(i - 1, 2, project);mList1.SetItemText(i - 1, 3, time);mList1.SetItemText(i - 1, 4, gread);mList1.SetItemText(i - 1, 5, address);//mList1.SetItemText(i, 1, number);}
其中的” Data2.xlsx “文件格式事先我已经将格式做好,将该文件放入项目文件下
四. 接下来用libxl.lib库读取excel文件
工程的配置
1、把include_cpp复制到工程文件夹下,设置包含目录2、把libxl.lib复制到工程文件夹下,附加依赖项:libxl.lib
3、把libxl.dll复制到Debug下
Dlg.cpp下补充头文件与命名空间
#include "libxl.h"
#include <iostream>
using namespace libxl;
Dlg.cpp下主要代码:
const TCHAR* ReadDataToWChar(Sheet* sheet, int row,int col)
{CellType type = sheet->cellType(row,col);TCHAR buff[1024];switch (type){case 1://Num{swprintf_s(buff,1024,_T("%.2lf"),sheet->readNum(row,col));return buff;}case 2://Str{return sheet->readStr(row,col);}default:{return _T("读取错误!");}}
}
void CExcelTestDlg::OnBnClickedButton1()
{//初始化Book* book = xlCreateBook(); //if(!book) return -1;//book->load("00.xls"); //直接读的方式 //创建两个表,一个为“测试写”,一个为“测试读”Sheet* sheet = book->addSheet(_T("测试写"));Sheet* sheet1 = book->addSheet(_T("测试读"));//sheet = book->getSheet(0); //创建出错返回//if(!sheet || !sheet1) return -2; ///设置格式////设置字体//libxl::Font* font = book->addFont();//font->setName(_T("0"));//font->setSize(20);//font->setColor(COLOR_DARKBLUE);//font->setItalic(); //设置样式Format* StrFormat = book->addFormat();//StrFormat->setAlignH(ALIGNH_LEFT);//StrFormat->setBorder(BORDERSTYLE_MEDIUMDASHDOTDOT);//StrFormat->setBorderColor(COLOR_RED);//StrFormat->setFont(font); Format* dateFormat = book->addFormat();//dateFormat->setNumFormat(NUMFORMAT_DATE); Format* NumFormat = book->addFormat();//NumFormat->setNumFormat(NUMFORMAT_NUMBER); //Format* NumFormat1 = book->addFormat();//NumFormat1->setNumFormat(NUMFORMAT_NUMBER_D2);/你提出的要求的测试代码///读EDIT写入EXCELCString str;GetDlgItemText(IDC_WRITE, str);//得到字符串sheet->writeStr(0, 0, str, StrFormat);//0行0列//读EXCEL写入EDITCString str2;str2 = ReadDataToWChar(sheet,0,0);//0行0列SetDlgItemText(IDC_READ, str2);/你提出的要求的测试代码///以下为自由发挥部分///写数据/// sheet->writeStr(2, 0, _T("Hello, World !"),StrFormat);sheet->writeNum(4, 0, 1000,NumFormat);//sheet->writeNum(5, 0, 20.98,NumFormat1);sheet->writeFormula(6, 0, _T("SUM(A5:A6)"));sheet->writeNum(8, 0, book->datePack(2012, 05, 17), dateFormat);//循环写for (int i = 0;i < 200;i++){sheet->writeStr(i, 2, _T("Hello, World !"),StrFormat);sheet->writeNum(i, 3, i);} ///读数据/// for (int i = 0;i < 200;i++){sheet1->writeStr(i, 0,ReadDataToWChar(sheet,i,2));sheet1->writeStr(i, 3,ReadDataToWChar(sheet,i,3));sheet1->setCellFormat(i,3,StrFormat);}///保存/// if(book->save(_T("00.xls"))) {// ::ShellExecute(NULL, _T("open"), _T("00.xls"), NULL, NULL, SW_SHOW); }else{std::cout << book->errorMessage() << std::endl;}book->release();
}
我当时是参考的这片文章,可以去看一下【mfc】excel读写——libxl.lib库
进行完上一步后,我们可以先打开文件看看效果
可以打开
五. ” 全选 “按键代码
// TODO: 在此添加控件通知处理程序代码for (int i = 0; i < mList1.GetItemCount(); i++){if (mList1.GetCheck(i) == FALSE) //未被选中的{mList1.SetCheck(i, TRUE);}else //选中的{mList1.SetCheck(i, FALSE);}}
六. 接下来就就最好去找一个服务器可以发短信,这里用的是阿里云的
经过操作,最主要的就是拿到 短信签名signName、模板**templateCode、accessKeyId、accessKeySecret。为后续的代码准备**
七. 在阿里云注册好账号有了ID后就接下来的操作:Windows下 VS2013编译,配置C/C++ libcurl开发环境
具体步骤可以参考这篇文章:Windows下 VS2013编译,配置C/C++libcurl开发环境
编译配置环境:
IDE:Visual Studio 2013
Env:Win 10
libcurl_version:curl 7.64.0
官网下载地址:https://curl.haxx.se/download.html
八. 构建libcurl静态库 (这里编译x64的release版本)
1,下载libcurl源码包,这里使用最新版本。
下载到本地解压后,留意红色框选的winbuild目录:
2,打开命令提示符
“开始”菜单——>Visual Studio 2013——>Visual Studio Tools——>VS2013 开发人员命令提示。
打开如下窗口(本机64位,这里选择红色框选快捷命令):
3,编译libcurl库
命令窗口切换到刚刚解压的源码文件夹的winbuild目录下
命令解析:
nmake是MS的编译工具
/f 参数描述文件名不使用默认的makefile
Makefile.vc 是winbuild里的makefile文件
mode=static 编译静态链接库
vc=12 是VC++版本号MACHINE=64,64位lib库DEBUG=no,是否是debug版本(这里是release版本)。更多详细命令参数,参考winbuild文件夹中的BUILD.WINDOWS.txt查看。
回车,等待编译完成,关闭命令行界面。此时会在curl根目录下,生成一个builds文件夹:
打开builds文件夹,其中libcurl-vc12-x64-release-static-ipv6-sspi-winssl 文件夹包含了我们需要的运行库和头文件(可将该目录拷贝至其他位置,若方便后续使用)。
***这一步可做可不做***
> 打开builds文件夹,其中libcurl-vc12-x64-release-static-ipv6-sspi-winssl
> 文件夹包含了我们需要的运行库和头文件(可将该目录拷贝至其他位置,若方便后续使用)。
九. 在Visual Studio中链接libcurl
1,在Visual Studio中,右键单击解决方案资源管理器中的项目,然后单击“属性”。
2,配置属性> C / C ++>常规>其他包含目录:添加F:\curl-7.64.0\builds\libcurl-vc12-x64-release-static-ipv6-sspi-winssl\include。
3,配置属性>链接器>常规>其他库目录:添加F:\curl-7.64.0\builds\libcurl-vc12-x64-release-static-ipv6-sspi-winssl\lib
将以下lib添加至工程!
libcurl_a.lib;Ws2_32.lib;Wldap32.lib;winmm.lib;Crypt32.lib;Normaliz.lib;
使用了静态编译libcurl,所以需要将CURL_STATICLIB预编译添加至工程。
如果没有编译debug版libcurl,则需要将“Runtime Library”改为Release版(即后面不带小写字母d)。同时官方并不建议使用“/MT”或“/MTd”。
注意此处设置修改为和上述设置一致。
十. 项目中调用libcurl
代码如下:
// ConsoleApplication3.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <stdio.h>
#include <curl.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>//#include<stdafx.h>
#define bzero(a, b) memset(a, 0, b)
#pragma warning(disable:4996)
#define MAXPARAM 2048CURL* curl;
CURLcode res;
/**
bingone
本样例依赖libcurl库
下载地址 https://curl.haxx.se/download.html
**/// 修改为您的apikey(https://www.yunpian.com)登录官网后获取
char* apikey = "你自己的apikey";
// 修改为您要发送的手机号
char* mobile = "159570";
// 设置您要发送的内容
char* text = "您的验证码是1234";
// 指定发送的模板id
int tpl_id = 3569052;
// 指定发送模板内容char* tpl_data[4] = { "#name#", "www", "#code#", "444" };// 发送语音验证码内容
int code = 1234;
// 获取user信息url
char* url_get_user = "你自己的url";
// 智能模板发送短信url
// 指定模板发送短信url
char* url_tpl_sms = "你自己的url";
// 发送语音验证码短信url
// ar * url_send_voice = "你自己的url";void send_data(char* url, char* data)
{// specify the urlcurl_easy_setopt(curl, CURLOPT_URL, url);// specify the POST datacurl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);// get response datacurl_easy_perform(curl);printf("\n\n");
}/**
* 指定模板单发
*/
void send_tpl_sms(char* apikey, char* mobile, int tpl_id, char* tpl_value)
{char params[MAXPARAM + 1];char* cp = params;sprintf(params, "apikey=%s&mobile=%s&tpl_id=%d&tpl_value=%s", apikey, mobile,tpl_id, tpl_value);send_data(url_tpl_sms, params);
}int main(void)
{curl = curl_easy_init();mobile = curl_easy_escape(curl, mobile, strlen(mobile));if (NULL == curl) {perror("curl open fail\n");}// 获取用户信息//get_user(apikey);// 发送语音验证码// nd_voice(apikey, mobile, code);char* tmp;char* tpl_value = (char*)malloc(sizeof(char) * 500);bzero(tpl_value, sizeof(char) * 500);// 模板短信发送需要编码两次,第一次URL编码转换int len = 0;tmp = curl_easy_escape(curl, tpl_data[0], strlen(tpl_data[0]));memcpy(tpl_value + len, tmp, strlen(tmp));len += strlen(tmp);tpl_value[len++] = '=';tmp = curl_easy_escape(curl, tpl_data[1], strlen(tpl_data[1]));memcpy(tpl_value + len, tmp, strlen(tmp));len += strlen(tmp);tpl_value[len++] = '&';tmp = curl_easy_escape(curl, tpl_data[2], strlen(tpl_data[2]));memcpy(tpl_value + len, tmp, strlen(tmp));len += strlen(tmp);tpl_value[len++] = '=';tmp = curl_easy_escape(curl, tpl_data[3], strlen(tpl_data[3]));memcpy(tpl_value + len, tmp, strlen(tmp));len += strlen(tmp);tmp = tpl_value;// 第二次URL编码tpl_value = curl_easy_escape(curl, tpl_value, strlen(tpl_value));send_tpl_sms(apikey, mobile, tpl_id, tpl_value);free(tmp);curl_easy_cleanup(curl);return 0;
}
之前让注册阿里云短信发送服务时所获得的密钥与URL 在这里便可以用到
将代码运行一遍便可以接受到短信了,但是现在属于用C++控制套程序发送短信,并没有用到MFC的” 发送短信“按键,还待后续继续完善
这里推荐一个关于MFC与云片程序相结合的网站,写的很全----云片
基于MFC与阿里云制作简易发送短信相关推荐
- 阿里云接口实现发送短信验证码
java 阿里云接口实现发送短信验证码 1. 阿里云后台配置短信相关 1.1 开通短信服务 1.2 添加模板签名 1.3 创建秘钥 1.4 短信需要后台授权--注意点 2 java--简单实现短信验证 ...
- 阿里云API定时发送短信(小记)
定时任务的代码:import com.google.gson.Gson; import com.jianke.bid.common.SMSUtils; import org.springframewo ...
- java 阿里云接口实现发送短信验证码
1.先去阿里云开通短信服务: 2.添加模板及签名:需要审核,个人账户审核就几分钟就OK 先解释一下模板及签名: 标准参照:https://help.aliyun.com/document_detail ...
- 使用阿里云短信通知服务发送短信--工具类
public class AliyunUtils {public static boolean sendSMS(String mobilephone,Integer status) throws Se ...
- Yii2 + 阿里云 后台配置发送短信
1.登录阿里云账号之后 首先鼠标移动到你的头像上 点击AccessKey之后 创建 2.找到短信服务这里 申请签名 和 模板 3.登录yii2框架后台 填写上相对应的信息. 4.在控制器中: publ ...
- 移动云mas-sdk方式发送短信
移动云mas-sdk方式发送短信 https://mas.ecloud.10086.cn/ 因业务需要,发送短信的方式由http方式改为sdk,项目使用springboot 云mas账号 http原有 ...
- 阿里云短信服务不对个人开放?如何在阿里云市场免费购买短信服务?云市场购买到的短信服务如何使用?(以谷粒学院项目为例)
问题描述: 在做谷粒学院项目时,需要使用阿里云的短信服务用于注册验证,但是阿里云的短信服务目前不对个人开放了,看到弹幕说可以在云市场购买,于是果断尝试了一把,这过程中又遇到头疼的依赖版本兼容问题,好在 ...
- 阿里云验证码与通知短信
1.入住阿里云 首先,注册阿里云账号或者快捷登陆 其次,实名认证 根据情况选择是企业还是个人用户(以个人用户为例) 然后选择个人支付宝授权认证 最后,根据实际情况填写个人信息 2.开通短信服务 首先, ...
- 阿里云——Java实现手机短信验证码功能
目录 如何实现短信验证码功能 1.准备工作 1.1 注册 阿里云 账号,并完成实名认证.找到短信服务功能. 1.2 开通短信服务 1.3 签名与模板 1.4 获取AccessKey 1.5 打开短信控 ...
最新文章
- Linux下的示例程序
- IAR编译提示could not open file lnkstm8s003f3.icf
- 与python相关的爬虫工具_python爬虫常用工具集合
- datename mysql_SQL日期时间函数总结(MSSQL)
- C++四种cast操作符
- 牛客网【每日一题】4月14日题目精讲 Xorto
- 很多文章是在下转载贴在此处,是为了自己以后遇到类似问题一时想不起来
- Sql Server 2005 PIVOT的行列转换应用实例
- Codeforces Round #207 (Div. 1) B. Xenia and Hamming(gcd的运用)
- 技术简报 2014-1-27
- 12月第1周网络安全报告:境内95.8万主机感染病毒
- 第一方数据,第二方数据,第三方数据:你了解多少?
- Code39码和Code93码的区别
- 浓淡相宜间,是灵魂的默契;
- Vue element 自定义表单验证(验证联系方式、邮箱、邮政编码)
- 抽象工厂模式读书笔记
- 【FFMPEG】视频转码之VOB视频无声处理
- KBEngine游戏服务器(一)——引擎源代码的获取和编译
- linux量产工具使用,33-Vstr开发板资料合集 开发工具 US升级和量产工具 LiveSuitV306_For_Linux64 LiveSuit_For_Linux64 RedMe...
- softmax分类器推导
热门文章
- 怎么检查计算机硬盘有没有供电,事实:如何检测计算机硬盘是否有问题?如何使用硬盘检测工具...
- linux u盘启动工具unetbootin
- 极路由1S 开启临时ssh 并刷breed成功
- 需求分析 及需求文档的编写
- Blender:Lowpoly头部建模流程 目录
- 《穷查理宝典》芒格思维笔记(二)
- PHP设计模式系列:目录
- 15个常用excel函数公式_EXCEL函数公式小妙招,点滴积累效率高
- 域名解析后内部服务器错误,网站出现域名解析错误怎么办?利用dnspod解决域名解析出错的方法...
- 开源项目mini-ipc简介