• 当年只会C# 所以写C++就成这样了!


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

    放出部分代码。如下图。 

    我们先以第一个为例:

    ApplicationHelper为例:

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

    在来看看里面的实现。 

    如有错误大家勿喷,本人对C++了解并不深。 但可以写C++项目仅此而已。 

    通用串口类 BCLSerialPort。 命名还是当年微软的mvc哈哈哈。 现在想想真有点囧!

     1 // BCLSerialPort.h: interface for the BCLSerialPort class.
     2 //
     3 //////////////////////////////////////////////////////////////////////
     4 
     5 #if !defined(AFX_BCLSERIALPORT_H__86B3D83F_D22C_44F9_B138_40E3D480EDFB__INCLUDED_)
     6 #define AFX_BCLSERIALPORT_H__86B3D83F_D22C_44F9_B138_40E3D480EDFB__INCLUDED_
     7 
     8 #if _MSC_VER > 1000
     9 #pragma once
    10 #endif // _MSC_VER > 1000
    11 
    12 typedef BOOL (CALLBACK* ONREAD)(const char * buf, DWORD dwBufLen, void* pContex);
    13 
    14 #define READ_BUFFER_SIZE        1024        ///读取串口数据长度
    15 #define READ_TIME_OUT        500                ///读超时 milliseconds
    16 
    17 #define SERIALPOINT_DEFAULT        0            ///串口初始状态
    18 #define SERIALPOINT_OPENED        1            ///串口已打开
    19 #define SERIALPOINT_CLOSED        2            ///串口已关闭
    20 
    21 
    22 class BCLSerialPort  
    23 {
    24 public:
    25     ///构造函数 
    26     BCLSerialPort();
    27     
    28     ///参数   comNo        串口号
    29     ///参数   baudRate    波特率
    30     BCLSerialPort(CString comNo, DWORD baudRate);    
    31     
    32     ///参数   comNo        串口号
    33     ///参数   baudRate    波特率
    34     ///参数      parity    校验位
    35     ///参数   byteBit    数据位
    36     ///参数      stopBit    停止位
    37     BCLSerialPort(CString comNo, DWORD baudRate, DWORD parity, BYTE byteBit, BYTE stopBit);    
    38     
    39     ///打开串口
    40     BOOL SerialPortOpen();    
    41     ///关闭串口
    42     void SerialPortClose();    
    43 
    44     ///写串口
    45     DWORD SerialPortWrite(LPCTSTR sBuf, DWORD dwToWrite);    
    46     ///读串口
    47     BOOL SerialPortRead(LPTSTR sBuf, DWORD& dwRead);        
    48 
    49     virtual ~BCLSerialPort();
    50     
    51 public:
    52     CString m_ComNo;            ///串口号
    53     DWORD m_BaudRate;            ///波特率
    54     BYTE m_ByteBit;                ///数据位
    55     BYTE m_StopBit;                ///停止位
    56     BYTE m_Parity;                ///奇偶校验 (无校验-NOPARITY)(奇校验-ODDPARITY)(偶校验-EVENPARITY)
    57 
    58     DWORD m_SendLength;            ///发送数据长度
    59 
    60     DWORD m_OpenState;            ///串口打开状态
    61     HANDLE h_Com;                    ///串口句柄
    62     COMMTIMEOUTS m_CommTimeouts;    ///串口超时
    63 };
    64 
    65 #endif // !defined(AFX_BCLSERIALPORT_H__86B3D83F_D22C_44F9_B138_40E3D480EDFB__INCLUDED_)

    通用Socket通讯类:

     1 #pragma once
     2 
     3 #include <winsock2.h>
     4 #include <windows.h> 
     5 
     6 #pragma comment(lib,"ws2_32.lib")
     7 
     8 #define WIN32_LEAN_AND_MEAN
     9 #define MAX_RECIVE_SIZE (256*1024)
    10 
    11 //定义连接断开事件
    12 typedef void (CALLBACK* ONCLOSE)(void* pOwner);
    13 //定义当有数据接收事件
    14 typedef void (CALLBACK* ONTCPREAD)(void* pOwner, void* tsOwner, const char * buf, DWORD dwBufLen);
    15 //定义Socket错误事件
    16 typedef void (CALLBACK* ONTCPERROR)(void* pOwner,int nErrorCode);
    17 
    18 class BCLTcpSocket  
    19 {
    20 
    21 public:
    22     BCLTcpSocket();
    23     virtual ~BCLTcpSocket();
    24 
    25     BOOL    Connect();                                //连接服务器
    26     BOOL    Close(void);                            //关闭
    27     void    CloseReciveThread(void);                //关闭接收线程
    28 
    29     void    ReciveData(void);
    30     BOOL    Send(const char* data , int dwBufLen);    //发送数据
    31     void    RegisteCallBack(ONCLOSE fClose, ONTCPREAD fRead, ONTCPERROR fError);// 设置处理回调接口    
    32 private:
    33     HANDLE    m_ExitReciveThread;                //退出接收线程
    34     static    DWORD WINAPI Recive(LPVOID lparam);        //接收数据
    35 
    36 public:
    37     SOCKET            m_Socket;                        //Socket通讯句柄
    38     HANDLE            m_ReciveThread;                    //数据监听线程
    39 
    40     DWORD            m_ConnectState;                    //连接状态 -1未连接 0 连接成功 1 连接失败
    41     DWORD            m_ReciveThreadId;                //接受线程ID
    42     char            m_Ip[255];                        //ip地址
    43     int                m_Port;                            //端口号
    44     char            m_Data[MAX_RECIVE_SIZE];        //接受最大数据缓冲数据区    
    45     void*            m_pOwner;                        //主线程指针
    46 
    47     ONCLOSE            OnClose;                        // 连接断开事件,回调函数    
    48     ONTCPREAD       OnRead;                            // 接收数据事件,回调函数    
    49     ONTCPERROR        OnError;                        // 发生错误事件,回调函数
    50 };

      数据库查询类 SearchCondition

     1 #pragma once
     2 #include <stdarg.h>
     3 
     4 ///数据库条件
     5 enum SqlOperator
     6 {
     7     Like = 0 ,          //模糊查询
     8     LikeAt,             //模糊查询匹配前面字符
     9     LikeLast,           //模糊查询匹配后面字符
    10     NotLike,            //不等于模糊查询匹配
    11     Equal,              //等于
    12     NotEqual,           //不等于
    13     MoreThan,           //大于、
    14     MoreThanOrEqual,    //大于等于
    15     LessThan,           //小于
    16     LessThanOrEqual,    //小于等于
    17     In                  //
    18 };
    19 
    20 class SearchCondition  
    21 {
    22 public:
    23     SearchCondition();
    24     virtual ~SearchCondition();
    25     
    26     ///获得条件
    27     CString GetCondition();
    28     
    29     ///获得条件符号
    30     CString GetSign(UINT operatorType);
    31     
    32     ///清空条件语句
    33     void NewSearchCondition();
    34     
    35     ///模糊查询
    36     void SearchConditionLike(CString fied, CString value, CString likeStr);
    37 
    38     ///模糊头查询
    39     void SearchConditionLikeAt(CString fied, CString value, CString likeStr);
    40 
    41     ///模糊尾查询
    42     void SearchConditionLikeLast(CString fied, CString value, CString sign, CString likeStr);
    43 
    44     ///模糊不包含查询
    45     void SearchConditionNotLike(CString fied, CString value, CString sign, CString likeStr);
    46 
    47     ///降序排序
    48     void SearchConditionOrderByDesc(CString fied);
    49 
    50     ///升序排序
    51     void SearchConditionOrderByAsc(CString fied);
    52 
    53     ///operatorType 数据库操作参数 fied 字段 value 值 sign 符号 likeStr 模糊查询符号
    54     void SearchConditionAnd(CString fied, SqlOperator operatorType, CString value, CString sign);
    55     
    56     ///operatorType 数据库操作参数 fied 字段 value 值 sign 符号 likeStr 模糊查询符号
    57     void SearchConditionOr(CString fied, SqlOperator operatorType, CString value, CString sign);
    58 
    59 
    60 public:
    61     ///条件
    62     CString m_Condition;
    63     ///
    64     SqlOperator m_SqlOperator;
    65 };

    通过以上写C++ 工控项目应该就不愁了。 串口, 有Socket通讯。 读写数据库。由于对C++不了解。 想用接口实现。后来才之后没接口概念。 通过需方法来代替。 这也给我提供了不少便利。 

    总结:都说C#转C++比较麻烦。在自己转向C++的过程中并没用出现太多的困难. 确实不是特别方便。 但是通过自己的逐步构造。 大多时候都将一些方法按照C#的命名方式转换过来。 这样写C++的代码跟写C#的一样。 感觉还是蛮爽的。 

    还望各路大神提供更牛X的方法!仅此提供给有需要c#转型C++的程序猿们一些思路。

  • 相关阅读:
    Ribbon【负载均衡策略】
    Ribbon【入门】
    Mysql主从复制原理及同步延迟问题
    JWT 身份认证优缺点分析以及常见问题解决方案
    Feign【token传递】
    Feign【首次请求失败】
    Feign【文件上传】
    Feign【替换默认的feign client】
    Feign【开启GIZP压缩】
    Feign【@FeignClient】
  • 原文地址:https://www.cnblogs.com/liuyunsheng/p/4060841.html
Copyright © 2020-2023  润新知