C++
文章平均质量分 50
战地小记者
这个作者很懒,什么都没留下…
展开
-
2021.5.13C++学习笔记————函数指针形式调用动态链接库接口
C++学习笔记————函数指针形式调用动态链接库接口事情起因是需要给一个动态库中的某些接口进行第二层封装,但是要保证其他接口完全不变(包括方法名),一开始以为就是再封装一层动态库(就是菜),实际编写时发现一个问题,就是其他接口要保证完全不变,那封装的第二层库里的方法名就要跟原动态库的方法名一样,那就不能用平时直接在 VS 里用 lib 形式链接器直接使用动态库了,因为会有函数方法名称冲突。函数指针形式调用动态链接库接口:不过后面想到之前用别人链接动态库的代码,在 LoadLibrary 之后,会用函数原创 2021-05-13 14:14:49 · 596 阅读 · 0 评论 -
2021.5.11C++学习笔记————常量折叠
C++学习笔记————常量折叠之前在学习C++类型转换的内容时,涉及到了 const 关键字,在写代码测试时发现一个现象:const int i = 1;int *j = (int *)&i;*j = 2;cout << &i << endl;cout << j << endl;cout << i << endl;cout << *j << endl;...原创 2021-05-12 14:22:37 · 238 阅读 · 0 评论 -
2020.5.8工作问题记录————C++结构体内数据错位
工作问题记录————C++结构体内数据错位最近工作中遇到一个问题,在做甲方的代理服务时,要传送一组数据,用结构体格式,在处理数据时,结构体数据正确,但是传出数据处理函数时,数据出现了错误。首先,结构体的内容很多,类似如下:struct My_msg{ int socketid; char cmd[5]; char termid[21]; char appid[11]; char site1[51];原创 2021-05-09 11:24:06 · 2647 阅读 · 0 评论 -
2021.4.19C++学习笔记————类型转换Casting Operator
C++学习笔记————类型转换Casting OperatorC++可用Casting Operator手动指定变量类型的转换,使得编译和运行时类型转换更加安全,对变量类型的转换可读性更高。转换分为四种:const_cast< type >( expression )reinterpret_cast< type >( expression )static_cast< type >( expression )dynamic_cast< type >原创 2021-05-08 15:02:13 · 263 阅读 · 1 评论 -
2021.4.18C++学习笔记————隐式转换
C++学习笔记————复制与转换1.隐式转换:C++中隐式转换包括:标准转换:窄型=>宽型:int => double,char => int数值计算:整数=>float,double同类型 signed 和 unsigned 转换(bit转换)浮点型=>整数型:可能会出现精度丢失和未知错误(转换后超出整数范围)非基本类型转换:bool型:true => 1,false => 00 => 任意指针 => void *子类 * =>原创 2021-04-19 19:27:33 · 179 阅读 · 0 评论 -
2021.4.14C++学习笔记————C++11/14新特性
C++学习笔记————C++11/14新特性1.声明类型自动推导:autoC++是强类型静态语言,除了模板,变量在编译时的类型就会被确定且不可更改。auto是一个数据类型,用于在声明时对被声明变量进行自动的强类型推导,如:auto i = 10; //自动推导int型...原创 2021-04-16 16:04:19 · 244 阅读 · 0 评论 -
2021.4.8C++学习笔记————重复进程检测
C++学习笔记————重复进程检测在服务器启动服务端时,服务端的ip和端口是给定的,所以要防止重复启动服务进程后互相阻塞ip的情况,在服务进程执行前需要进行重复进程检测,查看当前进程是否已经在运行。代码:int ProcessIfExist(char *pname){ char cmd[512]; char aline[256]; FILE *tmpfp; int iPExistFlag=0; char tpname[256]; char pid[10]; char sfilename原创 2021-04-08 09:42:17 · 349 阅读 · 0 评论 -
2021.3.30C++学习笔记————条件变量实现定时任务
C++学习笔记————条件变量实现定时任务近期部署的服务需要添加每隔十分钟轮询一次的功能,即定时任务,使用条件变量实现定时。#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <string.h>#include <time.h>#include <iostream>#include <map>#include <set&g原创 2021-03-30 09:30:18 · 342 阅读 · 0 评论 -
2021.3.29C++学习笔记————watchdog守护进程自动重启
C++学习笔记————watchdog守护进程自动重启最近写完一个服务端后,希望能在启动后如果程序异常退出了能够自动重启。经过查询,自己手动实现看门狗进程自动重启一般有两个方法:一.脚本重启:#!/bin/shwhile truedops -ef | grep "test(程序名)" | grep -v "grep"if ["$?" -eq 0]then./testecho "wath process has been restarted! "elseecho "watch原创 2021-03-30 09:08:43 · 1645 阅读 · 1 评论 -
2021.3.25C++学习笔记————守护进程
C++学习笔记————守护进程工作中要在Linux下部署一个代理服务,需要使其在后台运行并且防止僵尸进程,因此需要守护进程Daemon。守护进程详细流程:https://blog.csdn.net/lianghe_work/article/details/47659889Daemon代码:#include <unistd.h> #include <signal.h> #include <fcntl.h> #include <sys/sysl原创 2021-03-25 10:35:21 · 258 阅读 · 0 评论 -
2021.2.19C++学习笔记————简单MFC应用窗口程序编译实例
C++学习笔记————简单MFC应用窗口程序编译实例工作需要,编写一个窗口界面的小程序,为了偷懒不下Qt选择使用VS2015写MFC窗口应用。1.创建项目:使用VS2015创建MFC应用程序,选择“基于对话框”:在“使用MFC”那一项建议把“在共享DLL中使用MFC”改为静态的那个选项,这样可以让应用程序对环境依赖变低。(比如要复制到没有mfc库环境的电脑用)等待一会加载完成,项目创建成功,顺便把要用的第三方库,头文件什么的加进项目,准备工作完成。2.设计窗口界面:一般窗口资源界面在项目创原创 2021-02-20 14:28:12 · 2803 阅读 · 0 评论 -
2021.2.19C++学习笔记————Windows下dll动态库编译及调用
C++学习笔记————Windows下dll动态库编译及调用一. 编译:首先,选择Win32项目,设置项目名及地址:选择DLL,空项目:编写动态库:头文件:#pragma once;#include<iostream>#ifdef DLL_IMPLEMENT#define DLL_API _declspec(dllexport)#else#define DLL_API _declspec(dllimport)#endifextern "C" DLL_API str原创 2021-02-19 14:59:37 · 339 阅读 · 0 评论 -
2021.1.6C++学习笔记————C读取文件写入字符串
C++学习笔记————C读取文件写入字符串#include "stdio.h"#include "stdlib.h" int main( void ){ FILE *fp; fp = fopen("/home/tqk/tqk1/123.txt" , "r"); /*指针位置移动到文件末尾*/ fseek( fp , 0 , SEEK_END ); int file_size; /*读取文件大小*/ file_size = ftell( fp原创 2021-01-06 09:51:54 · 172 阅读 · 0 评论 -
2020.9.30工作问题记录————MFC库中afxwin.h无法打开
环境:windows10+vs2017使用mfc开发wndows应用时需要引入头文件#include<afxwin.h>但是这样写之后提示 afxwin.h无法打开多半是安装vs时没有选择上一些配置,导致mfc的相关配置出现问题解决:打开vs 的installer程序->更多->修改然后下载安装,即可使用mfc构建一个窗口的过程:...转载 2020-09-30 09:02:13 · 1295 阅读 · 0 评论 -
2020.7.13工作记录————VS2015生成控件或动态库依赖MFC库解决方法
工作记录————VS2015生成控件或动态库依赖MFC库解决方法今天我将自己在WIN10系统下VS2015生成的ocx控件交给同事使用,发现他在他的WIN7环境电脑下无法正确注册控件,而换到WIN10的电脑上后注册成功。经过排查,使用depends工具查看了ocx控件的依赖后发现,我的控件除了依赖了本来需要的第三方动态库外还依赖了MFC库,这应该是Windows和VS的标准库,所以同事在WIN7下无法正确注册的原因也找到了,我给他的控件必须有我这里系统版本的MFC库接口才能正确注册。所以现在需要解决的原创 2020-07-13 15:02:46 · 535 阅读 · 0 评论 -
2020.4.23工作记录————Regsvr32加载控件失败:“请确保该二进制存储在指定路径中。。。”
工作记录————Regsvr32加载控件失败:之前的OCX控件今天我因为工作需要又重新写了个新的,跟之前不同的是这次的控件链接了第三方的动态库,但是在OCX控件生成完成后我使用管理员身份运行cmd对控件进行注册时却出现了Regsvr32的模块加载错误:一开始我以为是regsvr32的问题,但是重新尝试注册了之前所写的OCX插件却能够注册成功,然后猜想或许是位数的问题,于是将OCX控件复制到...原创 2020-04-23 15:11:09 · 9103 阅读 · 2 评论 -
转存——C++中new与malloc区别
new与malloc的10点区别1.申请的内存所在位置new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用f...转载 2020-04-20 09:46:22 · 326 阅读 · 0 评论 -
2020.4.14C++学习笔记————多线程thread学习初试实例
C++学习笔记————多线程thread学习实例原创 2020-04-18 10:14:01 · 420 阅读 · 0 评论 -
2020.4.15C++学习笔记————WINAPI宏定义
C++学习笔记————WINAPI宏定义在学习时,发现有一个代码实例中的方法函数定义如下:DWORD WINAPI Fun(LPVOID lpParamter){ for (int i = 0; i < 10; i++) cout << "A Thread Fun Display!" << endl; return 0L;}...原创 2020-04-15 14:47:30 · 1300 阅读 · 0 评论 -
2020.4.3工作记录————WinDriver1221x64版本驱动接口库如何被32位程序调用
之前在Win10下做PCI卡的驱动测试,发现wd1020版本不能再win10环境安装,所以选择了wd1221x64版本。测试64位程序时没有错误,但是按照一样的步骤设置了项目属性后,32位程序运行时总返回no vaild license的错误,无法正确运行。WD接口库链接步骤经过排查,问题应该是出在系统位数不匹配上,同时我也发现在WinDriver文件夹下存放接口库文件的redis文件夹下除了...原创 2020-04-08 17:30:07 · 1276 阅读 · 0 评论 -
2020.4.1C++学习笔记——WinDriver1221在Win10的64位环境下调用接口库
之前使用WinDriver1221x64在Win10系统里生成了设备的inf文件并安装成功,接下来就要对设备进行测试和实验。单纯的检查设备是否完好可以使用WinDriver自带的设备测试功能,但是要对设备功能进行编程需要调用WinDriver的api接口库来做自己的测试程序。首先要找到自己安装WinDriver时的安装路径,我的就在D盘下,所以路径就是D:\WinDriver。在D:\WinD...原创 2020-04-08 15:57:34 · 2615 阅读 · 9 评论 -
2020.3.30工作记录——VS2010错误error LINK1181
今天在工作中遇到一个问题,具体情况是我用WinDriver的接口动态库编写了一个Release版本的测试程序,然后要将其打包发送到另一台PC上进行测试。理论上Release版本程序换到另一台PC上应该也能直接编译运行,但是在运行时出现错误:ERROR...原创 2020-04-01 09:38:16 · 733 阅读 · 0 评论 -
2020.3.27工作记录——如何在OCX控件方法中传入void *参数
之前项目中有一个html网页调用OCX控件的内容,但是在实际操作过程中发现没那么简单。测试网页调用的方法中,有一些调用第三方动态库的函数参数是void *类型的数据,且需要保留该参数并传入控件中的其他方法,这就代表void *类型的这个数据生命期至少要是整个控件范围,而不是存在于单个的控件方法中。在我的项目中,这个void *参数是一个设备句柄,用于标识项目进行操作的设备。而在控件中,被调用的方...原创 2020-03-28 11:34:56 · 561 阅读 · 0 评论 -
2020.3.27C++学习笔记——VARIANT变体数据类型实例
C++学习笔记——VARIANT变体数据类型实例之前工作中看到了VARIANT数据类型,了解到在较复杂些的工程中,很少只用到一个语言,例如之前的html网页调用ActiveX控件,就至少使用了html,js,c++三种语言。而在工程测试过程中,难免会有不同语言编译的模块要进行数据的传输,此时对于数据类型的定义和声明十分重要。例如,在html的OCX控件编写中,我发现VS自行生成的ActiveX...原创 2020-03-28 09:47:01 · 1357 阅读 · 0 评论 -
2020.3.20C++学习笔记——无lib文件链接动态库
C++学习笔记——无lib文件链接动态库之前工作中使用动态库时用的都是自己或公司的库,基本上原始工程文件都有,所以一直用的是VS的依赖库链接方式。但是最近工作中需要使用外部的动态库文件接口,动态库只有Release版本,没有lib文件,所以需要学习怎么在无lib文件情况下链接DLL。...原创 2020-03-24 16:31:49 · 1098 阅读 · 0 评论 -
2020.3.21C++学习笔记——typedef定义函数指针用法
C++学习笔记——typedef定义函数指针用法之前在学习C++链接动态库时,发现在只使用dll文件(无lib文件)链接动态库时,导出动态库中方法接口需要用到这样的代码:typedef int (*pAddr)(int a,int b);一开始没能理解,后来发现是要和下面Loadlibrary()函数后面的导出动态库方法接口位置的代码一起产生作用:pAddr Func=(pAddr)Ge...原创 2020-03-23 15:40:23 · 342 阅读 · 0 评论 -
2020.3.13C++学习笔记——生成ActiveX控件(OCX)并用简单html网页加载调用接口实例
生成ActiveX控件(OCX)并用简单html网页加载调用接口实例最近工作中需要一个简单网页来测试动态库功能,所以需要一个加载了ActiveX控件的html网页并且可以调用控件中的函数方法。实例中主要需要:1.一个可用VS2015自动生成基本框架的MFC ActiveX控件,2.一个简单的html网页,其中有少量js语言。下面分步骤实现网页调用OCX控件实例。1.VS2015自动生成MFC...原创 2020-03-23 15:08:35 · 1064 阅读 · 0 评论 -
2020.2.10C++学习笔记——C++操作Mysql事务机制(回滚)
C++学习笔记——C++操作Mysql事务机制(回滚)Mysql的事务机制(transaction)MySQL 事务主要用于处理操作量大,复杂度高的数据。数据库操作语句构成事务。在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。事务一般用来管理 insert,update,de...原创 2020-02-10 21:27:17 · 2040 阅读 · 0 评论 -
2019.1.9C++primer学习笔记——表达式
C++primer学习笔记——表达式1.sizeof表达式返回值是一个size_t型的数据,作用于指针类型对象时,返回的是当前指针的地址长度,而不是所指向对象的内存长度。作用于引用对象时,返回的是所引用的对象所需的内存长度。sizeof表达式是在编译时就完成计算,而不是程序运行时,可看作常量表达式。2.new和delete。3.隐式类型转换:在复合算式表达式中,为了不丢失数据精度,大类型向小...原创 2020-01-10 11:36:56 · 338 阅读 · 0 评论 -
2019.12.26C++primer学习笔记——C++数据类型
1.在32位环境中,int和long都是4个字节,在64位中,int占4个字节,long占8个字节。2.声明不是定义,声明只是在编译前告诉编译器存在某个变量或方法,不涉及内存分配。3.全局域内定义的变量会有初始值0,局部域内定义的变量或动态分配的内存中是未初始化数据。4.C++中有C语言风格的字符串类型char *,本质是一个字符数组,具有底层特性,string是C++新封装的一个类,目的是...原创 2020-01-02 09:52:08 · 472 阅读 · 0 评论 -
2019.12.6C++学习笔记——ASCII数据与HEX数据(十六进制)转换
近期工作要求将之前学习的C++操作数据库与Mac校验值计算结合起来,但是由于接口库是Linx下的so库,所以要重新在Linux系统下写一个C++工程进行编译。原创 2019-12-09 10:57:59 · 1476 阅读 · 0 评论 -
2019.12.3C++学习笔记——Linux系统C++链接动态库和操作数据库
近期工作要求操作数据库并转换Json格式计算Mac值,因为所给的接口库为so库,所以要在Linux系统下编写主程序。之前已经在工作中接触了Windows系统下的C++操作数据库、Json.cpp调用和链接动态库,这次在Linux下重新编译需要一些改动。Linux系统C++链接动态库在Linux系统中,如果没有安装带UI的编译工具软件的话就无法像在Windows下一样直接在项目属性页中添加依赖...原创 2019-12-04 19:20:23 · 373 阅读 · 0 评论 -
2019.11.21工作记录——windriver生成PCI驱动32位向64位移植
工作记录——windriver生成PCI驱动32位向64位移植近期公司项目中分配给我的任务为现有的32位PCI卡驱动需要将其从win7操作系统转移到win10系统,原本32位的工程也要变为64位。现有驱动程序工程为windriver10.20生成的inf文件加vs2010环境的32位测试工程,我需要将其改为win10系统下64位工程。首先需要兼容win10系统的windriver,我使用了w...原创 2019-11-22 10:02:38 · 2091 阅读 · 0 评论 -
2019.10.28C++学习笔记——不定参数函数方法VA_LIST
C++学习笔记——不定参数函数方法VA_LIST原创 2019-10-29 10:30:53 · 519 阅读 · 0 评论 -
2019.10.28C++学习笔记——简单日志类
C++学习笔记——简单日志类最近工作中我发现工作项目与在学校中的课设有很大不同,其中非常重要的一点就是对于代码每次bug产生和修复的记录,以此来提醒自己代码的改进过程。但是对于工作项目来说,每次的错误记录都要手工记录有些麻烦,所以需要在代码中加入可以帮助我们自动调用和写入日志的日志类来简化错误记录过程。Log日志需求:我暂时对于日志需求不高,要求在运行程序时,如果有函数返回了错误信息的返回值...转载 2019-10-28 15:21:55 · 399 阅读 · 0 评论 -
2019.10.23C++基础学习笔记——命名空间namespace用法
C++基础学习笔记——命名空间namespace用法命名空间的意义:在C++应用程序中会出现定义在不同区域中同名方法或者变量的情况。例如,可能我正在编写一段自己带有名为xyz()子函数的代码,并且我还链接有另一个可用的库,它也具有相同的xyz()子函数。现在编译器无法知道在代码中引用的xyz()函数的哪个版本。名称空间(namespace)被设计来克服这个困难,并被用作额外的信息来区分类似的...原创 2019-10-23 22:04:15 · 387 阅读 · 0 评论 -
2019.8.15C++基础学习笔记——Socket编程
C++Socket编程学习笔记C++Socket流程Windows下://server.cpp#include <stdio.h>#include <winsock2.h>#pragma comment (lib, "ws2_32.lib") //加载 ws2_32.dllint main(){ //初始化 DLL WSADATA wsaDa...原创 2019-08-19 09:37:35 · 315 阅读 · 0 评论 -
2019.8.20C++基础学习笔记——智能指针
C++基础学习笔记——智能指针在C++中动态分配内存可使用new和delete关键字,但是有时操作错误会导致内存泄漏,所以C++中开发了智能指针,智能指针的特点就是在使用后可以自己释放内存,避免内存泄漏的问题。智能指针auto_ptrauto_ptr是在C++98中提出的智能指针概念,其本质是一个模板类,主要用于解决动态分配引起内存泄漏的问题。auto_ptr解决内存泄漏的方法是使用类的构造...原创 2019-08-20 15:44:57 · 389 阅读 · 0 评论 -
2019.8.15C++基础学习笔记——动态内存分配
C++基础学习笔记——动态内存分配C++中所有内存需求都是在程序执行之前通过定义所需的变量来确定的。 但是可能存在程序的内存需求只能在运行时确定的情况。 例如,当需要的内存取决于用户输入。 在这些情况下,程序需要动态分配内存,C ++语言将运算符new和delete合成在一起。new分配动态内存关键字new根据变量类型来分配内存,分配使用完变量后用关键字delete释放内存。new语法:T...原创 2019-08-16 09:44:55 · 224 阅读 · 0 评论 -
2019.8.26C++基础学习笔记——C++程序使用Jsoncpp环境搭建
C++学习日记——C++程序使用Jsoncpp环境搭建Json含义JSON: JavaScript 对象表示法( JavaScript Object Notation) 。是一种轻量级的数据交换格式。 它基于ECMAScript的一个子集。许多编程语言都很容易找到JSON 解析器和 JSON 库。 JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。不同语言的不同json库...原创 2019-08-26 16:49:07 · 579 阅读 · 0 评论