当年只会C# 所以写C++就成这样了!_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 当年只会C# 所以写C++就成这样了!

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

 2014/10/30 3:20:49  真有意思  程序员俱乐部  我要评论(0)
  • 摘要:这应该是4-5年前了。当年之会c#敲敲代码也不会C++但深信开发这东西只要思想有了。只是语法问题。对于C++这貌似只有大牛才能胜任的我来说是如此困难。所以想想办法搞了很多通用类来避免C++中很多生疏的语法。放出部分代码。如下图。我们先以第一个为例:ApplicationHelper为例:看到这两个方法你想到什么了。是的。就是C#里的Application方法中的Doevent和startuppath方法。由于C#中很多方法多需要自己手动的写。而自己的经验积累的有限
  • 标签: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++的程序猿们一些思路。

 

发表评论
用户名: 匿名