当年只会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++的程序猿们一些思路。

时间: 2024-10-13 08:36:47

当年只会C# 所以写C++就成这样了!的相关文章

只是为了拾起一只笔,所以写了这些

很久不写东西了,回首这些年,从高中那会儿,写作文觉得好简单,找三个点,每个点再拓展下下,八百字很快就搞定了,现在不一样了,情绪略微激动都能让自己开始结巴,时间真是把好牛刀啊! 不过一样的是还是喜欢阅读,还是喜欢各种精美的文字,技术的亦或是实事短评,但是不再喜欢文绉绉的东西了,感觉自己受不了那种无聊的文字游戏,这也说明自己现在已经到了一个浮躁的高危点! 说起自己的浮躁,其实已经意识到了很久,也深深地感知此物的危险程度.还在学校里面的时候,感觉自己没有办法彻底改变,环境使然,可是作为一个工作将近一年

你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写

思路:java.util.concurrent.locks包下面ReadWriteLock接口,该接口下面的实现类ReentrantReadWriteLock维护了两个锁读锁和解锁,可用该类实现这个功能,很简单 import java.util.Date; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; /**  * 你需要实现一个

分布式计算 要不要把写日志独立成一个Server Remote Procedure Call Protocol

w https://en.wikipedia.org/wiki/Remote_procedure_call In distributed computing a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in another address space (commonly on another computer on a shared netw

写着写着就成无关痛痒了,本来想发点掏心掏肺的..

 http://passport.baidu.com/?business&un=3&un=%E5%B0%91%E5%A6%87%E6%89%BE%E5%8D%97%E5%AE%81%E6%9C%8D%E5%8A%A1#0 http://passport.baidu.com/?business&un=3&un=%E6%B4%8B%E5%A6%9E%E6%B1%95%E5%A4%B4%E6%89%BE%E6%9C%8D%E5%8A%A1#0 http://passport.

杂记c-----小写金额转化成大写数字;点击表格table时,当前被点击的tr行变色,其它行不变色;input隐藏显示

public string chang(string money) { //将小写金额转换成大写金额 double MyNumber = Convert.ToDouble(money); String[] MyScale = { "分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "

Android如果有一个任意写入的漏洞,如何将写权限转成执行权限

这个题目我以为是考的怎么进行提权,结果原来是这样的: 1. DexClassLoader 动态载入应用可写入的 dex 可执行文件 2. java.lang.Runtime.exec 方法执行应用可写入的 elf 文件 3. System.load 和 System.loadLibrary 动态载入应用可写入的 elf 共享对象 4. 本地代码使用 system.popen 等类似函数执行应用可写入的 elf 文件 5. 本地代码使用 dlopen 载入应用可写入的 elf 共享对象 6. 利用

程序员简历应该怎么写?

作者:ThoughtWorks中国链接:https://www.zhihu.com/question/25002833/answer/158108028来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 大家伙让一让,这个问题让老司机先答!作为一个潜入IT圈五年之久.看过数万份简历的HR,在这个问题上还是有点发言权的.HR在筛选简历时主要从公司需求出发,重点不一,不过还是有很多"通用"的套路,为了在30秒内判断出这份简历是否值得跟进,我认为程序员写简历的正确

‘生产者-消费者’模型与‘读-写者’模型

★生产者-消费者模型 首先,我们先分析一下生产者与消费者模型:生产者与消费者是模型中不可缺少的2种角色,当然模型中肯定需要一个保存数据的场所,能够将生产者生产的数据进行存储.同时,模型必须要满足生产者产生出数据后,消费者才能够进行使用,即就是消费者必须位于生产者之后,当然生产者生产的数据最多将场所放置满就不能继续生产,下面有简单的图示: 当然,如果有多个消费者和多个生产者,生产者与消费者之间的关系是同步的,生产者与生产者之间是互斥的,因为一块空间不能让多个生产者同时进行生产.消费者和消费者之间也

SQL Server Log文件对磁盘的写操作大小是多少

原文:SQL Server Log文件对磁盘的写操作大小是多少 SQL Server 数据库有三种文件类型,分别是数据文件.次要数据文件和日志文件,其中日志文件包含着用于恢复数据库的所有日志信息,SQL Server总是先写日志文件ldf,数据变化写入mdf则可以滞后,所以日志写入的速度在一定程序上决定了SQL Server所能承载的写事务量,那么ldf写入大小是多少呢? 要知道SQL Server写 Log的大小,这里使用工具Process Monitor 这里设置一个Filter,以满足只收