
C++
文章平均质量分 65
Frank.Ginger
coder
展开
-
DLL的创建和加载
创造DLL:1) 建立带有输出原型/结构/符号的头文件。2) 建立实现输出函数/变量的C/C++源文件。3) 编译器为每个C/C++源文件生成.obj模块。4) 链接程序将生成DLL的.obj模块链接起来。5) 如果至少输出一个函数/变量,那么链接程序也生成.lib 文件。创造EXE:6) 建立带有输入原型/结构/符号的头文件(视情况而定)。7) 建立不引用输入函数/变量的C/C++源文件。8) 编译器为每个C/C++源文件生成.obj源文件。9) 链接程序将各个.obj模块链接起来,生成原创 2021-01-14 17:27:56 · 331 阅读 · 0 评论 -
创建DLL模块
若要创建D L L模块,必须执行下列操作步骤:1) 首先必须创建一个头文件,它包含你想要从DLL输出的函数原型、结构和符号。DLL的所有源代码模块均包含该头文件,以帮助创建DLL。当创建需要使用DLL中包含的函数和变量的可执行模块(或多个模块)时,也需要这个头文件。2) 要创建一个C/C + +源代码模块(或多个模块),用于实现你想要在DLL模块中实现的函数和变量。由于这些源代码模块在创建可执行模块时是不必要的,因此创建DLL能够保护秘密。3) 创建DLL模块,将使编译器对每个源代码模块进行处理,原创 2021-01-14 15:23:06 · 383 阅读 · 0 评论 -
内核对象与线程同步的关系
对象 何时处于未通知状态 何时处于已通知状态 成功等待的副作用 进程(Process) 当进程仍然活动时 当进程终止运行时 (ExitProcess 或 TerminateProcess) 无 线程(Thread) 当线程仍然活动时 当线程终止运行时 (ExitThread 或TerminateThread) 无 作业 当作业的时间尚未结束时 当作业的时间已经结束时 无 文原创 2021-01-06 17:33:09 · 135 阅读 · 0 评论 -
c++ 时间类型详解 time_t
Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix 系统、类Unix系统中,也在许多其他操作系统中被广告采用。目前相当一部分操作系统使用32位二进制数字表示时间。此类系统的Unix时间戳...转载 2020-04-03 09:38:55 · 2452 阅读 · 0 评论 -
笔记9:C++内存管理
1.1 C++内存分配1.1.1分配方式简介 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应...原创 2020-03-16 11:53:42 · 237 阅读 · 0 评论 -
笔记8:map与set的底层实现
C++STL中map,set的底层实现全是用的红黑树。为什么需要红黑树? map,set底层都提供了排序功能,且查找速度快。红黑树实际上是AVL的一种变形,但是其比AVL(平衡二叉搜索树)具有更高的插入效率,当然查找效率会平衡二叉树稍微低一点点。它可以在O(logn)时间内做查找,插入和删除,这里的n是树中元素的数目。平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下...转载 2020-03-15 18:33:11 · 1085 阅读 · 0 评论 -
笔记7:vector和list
底层实现 vector的底层结构是动态顺序表,在内存中是一段连续的空间。 list的底层结构是带头节点的双向循环链表,在内存中不是一段连续的空间。随机访问 vector支持随机访问,可以利用下标精准定位到一个元素上,访问某个元素的时间复杂度是O(1)。 list不支持随机访问,要想访问list中的某个元素只能是从前向后或从后向前依次遍历,时间复杂度是O(N)。插入和删除...转载 2020-03-15 17:56:26 · 188 阅读 · 0 评论 -
笔记6:C++中的static关键字
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。1.面向过程设计中的static1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:#include <iostream.h&g...转载 2020-03-15 11:41:09 · 138 阅读 · 0 评论 -
笔记5:C++原子操作
原子操作是在多线程程序中“最小的且不可并行化的”操作,意味着多个线程访问同一个资源时,有且仅有一个线程能对资源进行操作。通常情况下原子操作可以通过互斥的访问方式来保证,例如Linux下的互斥锁(mutex),Windows 下的临界区(Critical Section)等。i++问题在多线程编程中,最常拿来举例的问题便是著名的i++ 问题,即:多个线程对同一个共享变量i执行i++ 操作。这...转载 2020-03-15 11:12:49 · 1448 阅读 · 1 评论 -
笔记4:重载、重写、隐藏
1、重载(overload)重载的定义为:在同一作用域中,同名函数的形式参数(参数个数、类型或者顺序)不同时,构成函数重载。例如:class A{public: int func(int a); void func(int a, int b); void func(int a, int b, int c); int...转载 2020-03-15 10:37:13 · 166 阅读 · 0 评论 -
笔记3:new、malloc()
malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针.malloc()工作机制malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然...原创 2020-03-14 16:41:26 · 188 阅读 · 0 评论 -
笔记2:智能指针
我们知道除了静态内存和栈内存外,每个程序还有一个内存池,这部分内存被称为自由空间或者堆。程序用堆来存储动态分配的对象即那些在程序运行时分配的对象,当动态对象不再使用时,我们的代码必须显式的销毁它们。在C++中,动态内存的管理是用一对运算符完成的:new和delete,new:在动态内存中为对象分配一块空间并返回一个指向该对象的指针,delete:指向一个动态独享的指针,销毁对象,...原创 2020-03-14 15:36:21 · 550 阅读 · 0 评论 -
笔记1:C++虚函数、多态
1、c++虚函数原理: 虚函数:指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。 c++中虚函数表的作用主要是实现了多态的机制。 多态:就是用父类的指针指向其子类的实例,然后通过父类的指针 根据不同的子类对象调用实际子类的成员函数,这种方法既不需要改动代码就可以让父类指针执行很多子类的操作,这就是虚函数的实现机制。...原创 2020-03-14 14:38:19 · 171 阅读 · 0 评论 -
_countof、sizeof、strlen、_Msize的区别和用法
_countof、sizeof、strlen、_Msize的区别和用法1 _countof:是系统定义的一个宏,求取元素的数组的元素个数2 sizeof:运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,获得保证能容纳实现所建立的最大对象的字节大小3 strlen:是一个函数,在运行时执行,返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机...原创 2020-03-04 15:48:57 · 1049 阅读 · 0 评论 -
DownloadByAddr
BOOL CHttpDownloader::DownloadByAddr(){ BOOL bResult = FALSE; HINTERNET hWinInet = NULL ; HINTERNET hSession = NULL ; HINTERNET hFile = NULL; HANDLE hSaveFile = INVALID_HANDLE_VALUE; ...原创 2020-02-26 19:13:27 · 4206 阅读 · 0 评论 -
c++的常用库
C++ 资源大全关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。标准库C++标准库,包括了STL容器,算法和函数等。C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。 Standard Template Librar...转载 2020-01-19 10:13:45 · 622 阅读 · 0 评论 -
字符串转换
(1)ASCII转UNICODEvoid ConvertAnsiTounicode(const CHAR* strIn, WCHAR * wstrOut){ int nLength = 0; nLength = MultiByteToWideChar(CP_ACP, 0, strIn, -1, NULL, 0); MultiByteToWideChar(CP_ACP...原创 2020-01-17 15:12:58 · 172 阅读 · 0 评论 -
替换字符串
int ReplaceAll( std::string* str, const std::string& pattern, const std::string& newpat ){ int count = 0; const size_t nsize = newpat.size(); const size_t psize = pattern.size();...原创 2020-01-17 14:45:54 · 179 阅读 · 0 评论 -
拆分字符串
template<typename T = std::string,typename Tout = std::vector<T>>unsigned int SplitString( const T& in, const T& sp, Tout* out ){ if ( in.empty() || out == nullptr )return 0...原创 2020-01-17 14:37:14 · 162 阅读 · 0 评论 -
win32 应用开机自启动 C++实现
#include <windows.h>//设置当前程序开机自启动void AutoStart(){ HKEY hKey; //std::string strRegPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; //1、找到系统的启动项 if (RegOpenKey...转载 2020-01-14 15:25:48 · 925 阅读 · 0 评论 -
SmartDB对sqlite封装
https://www.cnblogs.com/qicosmos/p/3805156.html转载 2020-01-13 16:27:11 · 312 阅读 · 0 评论 -
c/c++中常见的错误
软件编程的过程中,常见的错误有:1、内存泄露在c/c++中,内存管理器不会帮助你自动回收不再使用的内存,不管在什么情况下,采取谨慎的态度,杜绝内存泄露的出现,都是上策。尽管一些工具可以帮助我们检查内存泄露问题,但是编程时还是应该仔细一点,尽早排除这类错误,工具只是用作验证的手段。2、内存越界访问 1. 读越界,即读了不属于自己的数据,如果所读的内存地址是无效...转载 2019-12-30 14:48:23 · 1247 阅读 · 0 评论 -
MVC、MVP、MVVM模式浅析
一、什么是MVC(Model View Controller)模式?1、为了使得视图接口可以与模型和控制器进行交互,控制器执行一些初始化事件2、用户通过视图(用户接口)执行一些操作3、控制器处理用户行为(可以用观察着模式实现)并通知模型进行更新4、模型引发一些事件,以便将改变发告知视图5、视图处理模型变更的事件,然后显示新的模型数据6、用户接口等待用户的进一步操作...转载 2019-05-27 16:18:02 · 132 阅读 · 0 评论 -
C++11
C++11,先前被称作C++0x,即ISO/IEC 14882:2011,是目前的C++编程语言的正式标准。它取代第二版标准ISO/IEC 14882:2003(第一版ISO/IEC 14882:1998公开于1998年,第二版于2003年更新,分别通称C++98以及C++03,两者差异很小)。新的标准包含核心语言的新机能,而且扩展C++标准程序库,并入了大部分的C++ Technical Rep...翻译 2019-03-22 17:34:56 · 353 阅读 · 0 评论 -
汉字排序
/* 语言和地区两个因素组合确定一个字符集,即使用某个语言的某一地区会创建一个该地区的字符集来表示该语言的字符。*/static const std::locale zh_CN_locale = std::locale("Chinese_china"); // 设置语言_地域(国家)static const std::collate<char>& zh_CN_colla...原创 2019-09-30 13:53:54 · 723 阅读 · 0 评论 -
C++11 中的std::function和std::bind
C++11 中的std::function和std::bind0.4804-12 23:06字数1015阅读176661. 可调用对象可调用对象有一下几种定义:是一个函数指针,参考C++ 函数指针和函数类型; 是一个具有operator()成员函数的类的对象; 可被转换成函数指针的类对象; 一个类成员函数指针;C++中可调用对象的虽然都有一个比较统一的操作形式,但是定义方...转载 2019-08-29 11:13:14 · 98 阅读 · 0 评论 -
C++面试题总结
类定义中的声明顺序类定义中应该先定义public段,然后是protected段,其次是private段。每个段内应该遵循以下声明顺序:using、typedef和enums 常量 构造函数和赋值操作函数 析构函数 成员方法 成员数据1、new 、 delete 、 malloc 、 free的区别与关系? new / delete是C++的运算符,malloc / fr...原创 2019-04-09 14:07:37 · 386 阅读 · 0 评论 -
alloc()、malloc()、calloc()、realloc()区别及用法
C语言跟内存申请相关的函数主要有 alloca,calloc,malloc,free,realloc,sbrk等.函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别。malloc()函数有一个参数,即要分配的内存空间的大小: void *malloc(size_t size);calloc()函数有两个参数,分别为元素的数目和每个...原创 2019-04-09 14:01:13 · 9271 阅读 · 0 评论 -
动态库dll与静态库lib
1、DLL: DLL是DynamicLinkLibrary的简称,它是一个包含可由多个程序同时使用的代码和数据的库,是不可执行文件,懂爱链接提供了一种方式,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。与动态链接库相对应,还有一种称之为静态链接库的函数库。 DLL文件一般具备...转载 2018-05-30 10:27:13 · 355 阅读 · 1 评论 -
Windows下多线程编程
前言熟练掌握Windows下的多线程编程,能够让我们编写出更规范多线程代码,避免不要的异常。Windows下的多线程编程非常复杂,但是了解一些常用的特性,已经能够满足我们普通多线程对性能及其他要求。进程与线程1. 进程的概念进程就是正在运行的程序。主要包括两部分:• 一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。• 另一个是地址空间...转载 2019-03-26 17:58:25 · 11161 阅读 · 0 评论 -
windows系统c++多线程开发
线程的一些基本概念一、线程的基本概念。基本概念:线程,即轻量级进程(LWP:LightWeight Process),是程序执行流的最小单元。一个标准的线程由线程ID、当前指令指针(PC),寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程不拥有系统资源,近拥有少量运行必须的资源。二、线程的基本状态。基本状态:就绪、阻塞和运行三种基本状态。就绪...转载 2019-03-30 15:09:10 · 335 阅读 · 0 评论 -
浅谈智能指针auto_ptr/shared_ptr/unique_ptr
一.智能指针1.引入我们通常使用类似new申请一块空间,交由一个指针指向,假如说最后忘记delete,将会造成内存泄露。而智能指针的出现,就是对这种问题的解决方式,智能指针类似指针,却可以用于管理动态分配的内存。本章所解说的是三种智能指针:(1)C++98提出,C++11摒弃的auto_ptrC++11新增的(2)shared_ptr(3)unique_ptr在C++里面,...转载 2019-03-22 17:33:06 · 153 阅读 · 0 评论 -
C++/C++11中std::set用法汇总
一个容器就是一些特定类型对象的集合。顺序容器(sequential container)为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应。与之相对的,有序和无序关联容器,则根据关键字的值来存储元素。标准库还提供了三种容器适配器,分别为容器操作定义了不同的接口,来与容器类型适配:stack、queue和priority_queue。适配器(a...转载 2019-03-22 17:27:17 · 61219 阅读 · 2 评论 -
C++面试题集锦
http://www.cnblogs.com/Y1Focus/p/6707121.htmlhttp://blog.youkuaiyun.com/wdzxl198/article/details/9102759http://blog.youkuaiyun.com/hitwengqi/article/details/8015646https://www.cnblogs.com/shuang0109/p/90595...转载 2019-02-18 14:12:34 · 137 阅读 · 0 评论 -
Exceptional C++ 笔记
1、 使用常引用const & 代替值传递2、 使用先增操作,避免使用后增操作:在进行后增操作时,对象不但需要自增,还要返回一个包含自增前值得临时对象。3、 遵循‘单入口/单出口’原则,绝不要在一个函数里面写有多个return语句。4、 绝对不要返回对局部对象的引用!!!5、 尽量使用标准库算法6、 优先采用 "a opt= b" 这样的写法, 而不是 "a...原创 2019-03-14 16:55:01 · 303 阅读 · 0 评论 -
C++面试随笔
1、Http接口中Get和Post区别: GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连。 Get提交的数据大小有限制,最多只能有1024个字节,而Post没有限制。 GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。 GET方式提交数据,会带来安全问...原创 2019-04-09 14:08:56 · 121 阅读 · 0 评论 -
__stdcall、__cdecl、__fastcall、nakedcall区别
__stdcall、__fastcall、__cdecl、nakedcall的主要区别在于两点:1:汇编角度时传入参数的先后顺序2:汇编代码中函数的栈的初始化和清理由谁处理 __stdcall __cdecl __fastcall 参数传递方式 右->左 倒叙压...转载 2019-04-09 14:52:57 · 317 阅读 · 0 评论 -
C++中int与string的相互转换【转】
一、int转string1.c++11标准增加了全局函数std::to_string:string to_string (int val);string to_string (long val);string to_string (long long val);string to_string (unsigned val);string to_string (unsi...转载 2019-08-20 10:17:53 · 269 阅读 · 0 评论 -
Windows下C++获取进程cpu使用率,内存使用,IO情况
https://whyabc.iteye.com/blog/2002685process_stat.h:* @brief 进程统计信息函数的声明 #ifndef PROCESS_STAT_H #define PROCESS_STAT_H #ifdef __cplusplus extern "C" { #endif typedef long long ...转载 2019-07-03 11:56:47 · 6995 阅读 · 0 评论 -
使用AllocConsole在Win32程序中调用控制台调试输出
如何方便地在Win32程序中使用控制台进行调试输出?:AllocConsole函数和C-Runtime的freopen函数。具体操作流程如下:打开控制台 重定向输出流至控制台 执行调试信息输出操作完整代码如下:AllocConsole();freopen("CONOUT$", "w", stdout);std::cout << "This is a test i...转载 2019-05-31 10:30:55 · 4046 阅读 · 0 评论