這應該是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++的程序猿們一些思路。
可以的,只要簽證有效期內任何簽證覆蓋的國家都可以去
你確認下是不是確實半年有效,多次入境,如果是就可以的
想要有出路 就是還要學習 現在一月3000塊或許夠用 未必五年之後還夠用 找一家好一點的學校,學點東西吧 做不了白領 去做個藍領啊 我有一朋友學建築的 就一中專學歷 上學時候就是一個小混混 畢業證最後還是找人買出來的 畢業後在建築工地干了兩年 自己考上了成人高考 現在工資兩千七八,做任何事情不要和人去攀比只要你把自己的事做的最好就行了 我朋友就是那樣 剛去工地時候他的打扮讓人看了挺不舒服的 張牙舞爪的 時間長了他也明白了 開始好好工作了 好好學習了 就像變了一個人 好好學習把 不管什麼專業 首先你要用心去學 將來都會有用