当年只会C# 所以写C++就成这样了!
这应该是4-5年前了。 当年之会c#敲敲代码也不会C++但深信开发这东西只要思想有了。 只是语法问题。 对于C++这貌似只有大牛才能胜任的,而对于我来说是如此困难。 所以想想办法搞了很多通用类来避免C++中很多生疏的语法。
放出部分代码。如下图。

我们先以第一个为例:
ApplicationHelper为例:

看到这两个方法你想到什么了。 是的。 就是C#里的Application方法中的Doevent和startuppath方法。 由于C#中很多方法多需要自己手动的写。 而自己的经验积累的有限。 而且还局限于C#转行C++所以就只能写成这样了。 所以我想所的就是我上面的很多的类都是一C#为基础构造出来的避免再去了解过多的C++原理。何乐而不为!
在来看看里面的实现。

如有错误大家勿喷,本人对C++了解并不深。 但可以写C++项目仅此而已。
通用串口类 BCLSerialPort。 命名还是当年微软的mvc哈哈哈。 现在想想真有点囧!
// BCLSerialPort.h: interface for the BCLSerialPort class.
//
////////////////////////////////////////////////////////////////////// #if !defined(AFX_BCLSERIALPORT_H__86B3D83F_D22C_44F9_B138_40E3D480EDFB__INCLUDED_)
#define AFX_BCLSERIALPORT_H__86B3D83F_D22C_44F9_B138_40E3D480EDFB__INCLUDED_ #if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000 typedef BOOL (CALLBACK* ONREAD)(const char * buf, DWORD dwBufLen, void* pContex); #define READ_BUFFER_SIZE 1024 ///读取串口数据长度
#define READ_TIME_OUT 500 ///读超时 milliseconds #define SERIALPOINT_DEFAULT 0 ///串口初始状态
#define SERIALPOINT_OPENED 1 ///串口已打开
#define SERIALPOINT_CLOSED 2 ///串口已关闭 class BCLSerialPort
{
public:
///构造函数
BCLSerialPort(); ///参数 comNo 串口号
///参数 baudRate 波特率
BCLSerialPort(CString comNo, DWORD baudRate); ///参数 comNo 串口号
///参数 baudRate 波特率
///参数 parity 校验位
///参数 byteBit 数据位
///参数 stopBit 停止位
BCLSerialPort(CString comNo, DWORD baudRate, DWORD parity, BYTE byteBit, BYTE stopBit); ///打开串口
BOOL SerialPortOpen();
///关闭串口
void SerialPortClose(); ///写串口
DWORD SerialPortWrite(LPCTSTR sBuf, DWORD dwToWrite);
///读串口
BOOL SerialPortRead(LPTSTR sBuf, DWORD& dwRead); virtual ~BCLSerialPort(); public:
CString m_ComNo; ///串口号
DWORD m_BaudRate; ///波特率
BYTE m_ByteBit; ///数据位
BYTE m_StopBit; ///停止位
BYTE m_Parity; ///奇偶校验 (无校验-NOPARITY)(奇校验-ODDPARITY)(偶校验-EVENPARITY) DWORD m_SendLength; ///发送数据长度 DWORD m_OpenState; ///串口打开状态
HANDLE h_Com; ///串口句柄
COMMTIMEOUTS m_CommTimeouts; ///串口超时
}; #endif // !defined(AFX_BCLSERIALPORT_H__86B3D83F_D22C_44F9_B138_40E3D480EDFB__INCLUDED_)
通用Socket通讯类:
#pragma once #include <winsock2.h>
#include <windows.h> #pragma comment(lib,"ws2_32.lib") #define WIN32_LEAN_AND_MEAN
#define MAX_RECIVE_SIZE (256*1024) //定义连接断开事件
typedef void (CALLBACK* ONCLOSE)(void* pOwner);
//定义当有数据接收事件
typedef void (CALLBACK* ONTCPREAD)(void* pOwner, void* tsOwner, const char * buf, DWORD dwBufLen);
//定义Socket错误事件
typedef void (CALLBACK* ONTCPERROR)(void* pOwner,int nErrorCode); class BCLTcpSocket
{ public:
BCLTcpSocket();
virtual ~BCLTcpSocket(); BOOL Connect(); //连接服务器
BOOL Close(void); //关闭
void CloseReciveThread(void); //关闭接收线程 void ReciveData(void);
BOOL Send(const char* data , int dwBufLen); //发送数据
void RegisteCallBack(ONCLOSE fClose, ONTCPREAD fRead, ONTCPERROR fError);// 设置处理回调接口
private:
HANDLE m_ExitReciveThread; //退出接收线程
static DWORD WINAPI Recive(LPVOID lparam); //接收数据 public:
SOCKET m_Socket; //Socket通讯句柄
HANDLE m_ReciveThread; //数据监听线程 DWORD m_ConnectState; //连接状态 -1未连接 0 连接成功 1 连接失败
DWORD m_ReciveThreadId; //接受线程ID
char m_Ip[]; //ip地址
int m_Port; //端口号
char m_Data[MAX_RECIVE_SIZE]; //接受最大数据缓冲数据区
void* m_pOwner; //主线程指针 ONCLOSE OnClose; // 连接断开事件,回调函数
ONTCPREAD OnRead; // 接收数据事件,回调函数
ONTCPERROR OnError; // 发生错误事件,回调函数
};
数据库查询类 SearchCondition
#pragma once
#include <stdarg.h> ///数据库条件
enum SqlOperator
{
Like = , //模糊查询
LikeAt, //模糊查询匹配前面字符
LikeLast, //模糊查询匹配后面字符
NotLike, //不等于模糊查询匹配
Equal, //等于
NotEqual, //不等于
MoreThan, //大于、
MoreThanOrEqual, //大于等于
LessThan, //小于
LessThanOrEqual, //小于等于
In //
}; class SearchCondition
{
public:
SearchCondition();
virtual ~SearchCondition(); ///获得条件
CString GetCondition(); ///获得条件符号
CString GetSign(UINT operatorType); ///清空条件语句
void NewSearchCondition(); ///模糊查询
void SearchConditionLike(CString fied, CString value, CString likeStr); ///模糊头查询
void SearchConditionLikeAt(CString fied, CString value, CString likeStr); ///模糊尾查询
void SearchConditionLikeLast(CString fied, CString value, CString sign, CString likeStr); ///模糊不包含查询
void SearchConditionNotLike(CString fied, CString value, CString sign, CString likeStr); ///降序排序
void SearchConditionOrderByDesc(CString fied); ///升序排序
void SearchConditionOrderByAsc(CString fied); ///operatorType 数据库操作参数 fied 字段 value 值 sign 符号 likeStr 模糊查询符号
void SearchConditionAnd(CString fied, SqlOperator operatorType, CString value, CString sign); ///operatorType 数据库操作参数 fied 字段 value 值 sign 符号 likeStr 模糊查询符号
void SearchConditionOr(CString fied, SqlOperator operatorType, CString value, CString sign); public:
///条件
CString m_Condition;
///
SqlOperator m_SqlOperator;
};
通过以上写C++ 工控项目应该就不愁了。 串口, 有Socket通讯。 读写数据库。由于对C++不了解。 想用接口实现。后来才之后没接口概念。 通过需方法来代替。 这也给我提供了不少便利。
总结:都说C#转C++比较麻烦。在自己转向C++的过程中并没用出现太多的困难. 确实不是特别方便。 但是通过自己的逐步构造。 大多时候都将一些方法按照C#的命名方式转换过来。 这样写C++的代码跟写C#的一样。 感觉还是蛮爽的。
还望各路大神提供更牛X的方法!仅此提供给有需要c#转型C++的程序猿们一些思路。
当年只会C# 所以写C++就成这样了!的更多相关文章
- 当年只会C# 所以写C++就成这样了! log4cplus -> log4net
属实C++不会. 目前帮朋友弄个小项目需要小折腾一下. c# 一直采用 log4net ,c++的呢,找找有个log4cplus 知识有限,做个通用类吧.别把精力放在这里. 动手创建个静态类. 为了 ...
- 分布式计算 要不要把写日志独立成一个Server Remote Procedure Call Protocol
w https://en.wikipedia.org/wiki/Remote_procedure_call In distributed computing a remote procedure ca ...
- 当年写的如何成为一名MSSQL DBA
很多开发人员都想成为一名数据库培训,也有很多人一开始就把自己定位成为一名DBA,DBA究竟需要掌握些什么知识和技能呢?以下是我 做DBA工作和面试DBA时,整理的一些DBA方面的三十个问 ...
- 【pyhon】理想论坛爬虫1.05版,将读取和写DB分离成两个文件
下午再接再厉仿照Nodejs版的理想帖子爬虫把Python版的也改造了下,但美中不足的是完成任务的线程数量似乎停滞在100个左右,让人郁闷.原因还待查. 先把代码贴出来吧,也算个阶段性成果. 爬虫代码 ...
- Android如果有一个任意写入的漏洞,如何将写权限转成执行权限
这个题目我以为是考的怎么进行提权,结果原来是这样的: . DexClassLoader 动态载入应用可写入的 dex 可执行文件 . java.lang.Runtime.exec 方法执行应用可写入的 ...
- 将MNIST手写数据集转换成图片保存到本地
# 加载图片 data = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = data.load_data() plt.im ...
- 一步一步用Canvas写一个贪吃蛇
之前在慕课网看了几集Canvas的视频,一直想着写点东西练练手.感觉贪吃蛇算是比较简单的了,当年大学的时候还写过C语言字符版的,没想到还是遇到了很多问题. 最终效果如下(图太大的话 时间太长 录制gi ...
- 写在19年初的后端社招面试经历(两年经验): 蚂蚁 头条 PingCAP
去年(18年)年底想出来看看机会,最后很幸运地拿到了 PingCAP,今日头条的 offer 以及蚂蚁金服的口头 offer.想着可以总结一下经验,分享一下自己这一段"骑驴找马"过 ...
- 曾经我是一个只会excel的数据分析师,直到我遇到了……
我是一个数据分析师. 准确来说我是一个当年只会excel数据透视表,就天不怕地不怕地来当数据分析师的人.当年的某一天,我的老板Q我: 小刘啊,我小姨子给了我一个全国市委书记的名单,你帮我看看,有什么规 ...
随机推荐
- c# Linq查询
c#提供的ling查询极大的遍历了集合的查询过程,且使用简单方便,非常的有用. 下面将分别用简单的例子说明:ling基本查询.延迟查询属性.类型筛选.复合from字句.多级排序.分组查询.联合查询.合 ...
- Mvc中域的添加和不同域之间的跳转
一.在新添加的域中中的 AreaRegistration中作如下设置: 二.在原来的Global.asax中设置: 三.不同域之间的跳转 @Url.Action("Index", ...
- 我的.NET自学之路
我第一门语言接触的并不是.net,而是php刚学php感觉还好,但是一学到后面就有一点头晕乎乎的,我感觉没有一个好的编写php代码的编辑器.而且php是弱类型语言,感觉起来没有像c,java,c#这些 ...
- lucene大索引文件分布式存储方案
这几天实现了个Lucene分布式检索的模块,采用的分布式方案是将数据分块,分别生成N个索引文件,放到N个节点上运行.检索时,对每一个节点发出查询请求,将N个节点返回的结果归并,然后生成一个新的结果.如 ...
- CSS3中的动画功能(一)
css3中的动画功能分为transitions功能和animations功能,这两种功能都可以通过改变css属性值来产生动画效果.今天带大家一起来看看css3动画功能中的transitions的用法. ...
- C# 异步
private void GetHttpResponse() { var client = new Microsoft.HBase.Client.HBaseClient(new ClusterCred ...
- Asp.Net HttpContext.RemapHandler 用法
最近在看HttpHandler映射过程文章时发现Context对象中有一个RemapHandler方法,它能将当前请求映射到指定的HttpHandler处理,可跳过系统默认的Httphandler.它 ...
- iphone如何导出微信聊天记录到电脑?
有个小美眉买了个iphone,但发现自己就是一小白,很多功能都不会用,微信倒是用得挺上手的,可以晚上聊到三四点,流量直接飙升500MB.最近她说手机太卡了,问ytkah帮她整一下.拿起她的IPhone ...
- Xshell个性化设置,解决Xshell遇到中文显示乱码的问题
在同事的推荐下,今天开始使用Xshell连接Linux,但是发现一个“遇到中文显示乱码”的问题, 同事的解决方案如下: 平常给Linux上传文件之前,先把文件转换成UTF-8编码形式, 然后设置Xsh ...
- PHP变量作用域详解(二)
学过C的人用PHP的时候一般会相当顺手,而且感到PHP太方便太轻松.但在变量作用域这方面却与C有不同的地方,搞不好会相当郁闷,就找不到错误所在.昨晚就与到这么一个问题,是全局变量在函数中的问题.今天搜 ...