當年只會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++的程序猿們一些思路。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM