C++
King.W.
这个作者很懒,什么都没留下…
展开
-
VS2015 编译 mongodb c driver
准备cmakeVS2105下载源码[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yGOMXyKd-1585052064416)()]源码中要求cmake的版本是3.1+[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JEfy9oTV-1585052153268)(])...原创 2020-03-24 20:46:11 · 462 阅读 · 0 评论 -
采用_beginthread/_beginthreadex函数创建多线程
1、CRT简介: CRT: (C Runtime Library)即C运行时库,是系统运行的基础,包含了c常用的函数集(如:printf,malloc,strcpy等),为运行main做了初始化环境变量、堆、io等资源,并在结束后清理。在Windows环境下,VC提供的 C run-time library又分为动态运行时库、静态运行时库、多线程、单线程、调试版本(Debug)、发行版本(Rele转载 2016-08-25 21:22:40 · 996 阅读 · 0 评论 -
seekg()与tellg()相关文件操作
对输入流操作:seekg()与tellg() 对输出流操作:seekp()与tellp() 下面以输入流函数为例介绍用法: seekg()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址。 对于第一个参数,可以是正负数值,正的表示向后偏移,负的表示向前偏移。而第二个参数可以是: ios::beg:表示输入流的开始位置 ios::cur:表示输入流的当前位置 ios转载 2016-09-11 16:52:15 · 1452 阅读 · 0 评论 -
_asm int 3 软件中断
int 3机器码0cch,是无数人的最爱,你不见VC++不管是链接还是初始化,都用这个 0CCh来填,你不见所有运行在ring3的debug都使用这个0cc来插入你想中断调试的位置,以至在不去掉断点的情况下写盘,在你的代码中会发现这个莫名其妙的0CCh。int 3不过是一个软件断点中断,你自己就可以任意修改这个中断,在anti-debug中,你可以通过修改这个中断给调试者带来巨大的惊喜,如果你能更深转载 2016-08-01 10:42:14 · 5432 阅读 · 0 评论 -
C++静态成员
类中的静态成员真是个让人爱恨交加的特性。我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。 静态类成员包括静态数据成员和静态函数成员两部分。 一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具转载 2016-05-08 10:37:09 · 434 阅读 · 0 评论 -
C/C++中的extern关键字详解
原文:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一翻译 2015-10-07 21:06:46 · 380 阅读 · 0 评论 -
预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
用VC++ 2008 编写C语言程序,编译出现错误:预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)解决方法:建工程时 建立空项目 或者在项目设置里关闭预编译头的选项!当 Visual C++ 项目启用了预编译头 (Precompiled header) 功能时,如果项目中同时混合有 .c 和 .cpp转载 2015-10-25 15:13:52 · 733 阅读 · 0 评论 -
使用_CrtSetDbgFlag检测内存泄露
一、介绍:动态分配、回收内存是C/C++编程语言一个最强的特点,但是中国哲学家孙(Sun Tzu,我不知道是谁?那位知道?)指出,最强的同时也是最弱的。这句话对C/C++应用来说非常正确,在内存处理出错的地方通常就是BUGS产生的地方。一个最敏感和难检测的BUG就是内存泄漏-没有把前边分配的内存成功释放,一个小的内存泄漏可能不需要太注意,但是程序泄漏大块内存,或者渐增式的泄漏内存可能引起的现象是:先转载 2016-05-30 22:54:15 · 856 阅读 · 0 评论 -
DLL入口函数DllMain
每个DLL都可以有一个入口点函数DllMain,系统会在不同的时刻调用此函数。以下是DllMain的一般形式:BOOL WINAPI DllMain( HINSTANCE hinstDLL, // handle to DLL module DWORD fdwReason, // reason for calling function LPVOID lpRese转载 2016-05-30 22:40:40 · 2572 阅读 · 0 评论 -
C/C++程序员必须熟练应用的开源项目
转自:http://blog.163.com/cp7618@yeah/blog/static/702347772014758182929作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特转载 2016-05-30 13:45:41 · 638 阅读 · 1 评论 -
动态链接库
windows API中的所有函数都包含在dll中。 其中三个最重要的dll: 1、Kernel32.dll:包含用于管理内存、进程和线程的各个函数。 2、User32.dll:包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数。 3、GDI32.dll:包含用于画图和显示文本的各个函数。静态库:lib 函数和数据被编译进一个二进制文件中,在使用静态库的情况下,编译器在链接可执原创 2016-04-20 15:21:13 · 741 阅读 · 0 评论 -
GetTickCount/QueryPerformanceFrequency/QueryPerformanceCounter
DWORD GetTickCount(void); 1) 定义在Release版本中,该函数从0开始计时,返回自设备启动后的毫秒数(不含系统暂停时间)。在Debug版本中,设备启动后便从计时器中减去180秒。这样方便测试使用该函数的代码的正确溢出处理。返回值:如正确,返回毫秒数。头文件: Winbase.h. 链接库: Coredll.lib.2) 应用用来计算某个操作所使用的时间:转载 2016-08-24 09:09:02 · 539 阅读 · 0 评论 -
JNI引用C++dll若干问题总结-如何导出C++中的类成员函数
最近做项目使用JNI引用C++的dll,在此记录遇到的问题。1.如何导出C++中的类 大家都知道JNI只能导出全局函数,至少我搜索了好久都没看到过有导出类的,貌似不可以。当然如果可以就更好了。那么既然使用的是C++语言,如果不使用类的话,那还不如直接使用C。总之,面向对象编程就是比面向过程”艺术”。所以就遇到个问题,C++类中的成员函数如何使用JNI导出?JNI只能导出全局函数。所以,我们可以采用原创 2016-09-14 13:51:47 · 1346 阅读 · 0 评论 -
.NET 托管代码和非托管代码的区别
转自:http://gaoling386.blog.163.com/blog/static/54046024201222045754681/什么是托管代码(managed code)?托管代码是一microsoft的中间语言(IL),他主要的作用是在.NET FRAMEWORK的公共语言运行库(CLR)执行代码前去编译源代码,也就是说托管代码充当着翻译的作用,源代码在运行时分为两个阶段...转载 2018-03-28 11:47:08 · 2725 阅读 · 0 评论 -
关于渲染帧率(FPS)的问题
先列举几个关于渲染帧率的文章: 1. http://ruinerlee.blog.163.com/blog/static/215611167201292990203/ 2. http://blog.codingnow.com/2008/04/fps.html 3. http://blog.csdn.net/strongcoding/article/details/6252313#include原创 2017-03-02 00:34:23 · 11087 阅读 · 0 评论 -
Cocos2d-x运行机制-代理模式
Cocos2d-x的入口:CCApplicationProtocol接口:定义通用接口// CCApplicationProtocol.h#pragma onceclass CCApplicationProtocol{public: CCApplicationProtocol(); virtual ~CCApplicationProtocol(); virtual boo原创 2016-11-19 12:58:12 · 855 阅读 · 0 评论 -
编译V8
参考: http://blog.csdn.net/andr0id/article/details/50067817 http://www.jb51.net/article/70608.htm1.下载V8源码: https://github.com/objcode/v8之所以没有下载git上的库,是因为按照网上搜的教程,生成VS项目的过程太复杂,要下载很多依赖项,太麻烦。使用svn上的库相对简单翻译 2016-10-06 19:32:40 · 924 阅读 · 0 评论 -
C++中的虚继承
#include <iostream>using namespace std;class A{ virtual void f(){};};class B : public virtual A{ virtual void f(){};};class C: public virtual A{ virtual void f(){}; virtual void t(){};};int转载 2016-08-14 15:53:00 · 410 阅读 · 0 评论 -
Windows线程同步之互锁函数(Interlocked)
Windows下进程内部的各个线程之间的同步不需要借助内核对象,Windows提供的默认在用户模式下的线程同步工具。互锁函数为多线程同步访问共享变量提供了一个简单的机制。如果变量在共享内存,不同进程的线程也可以使用此机制。互锁函数对共享变量的操作是原子的,这个原子性体现在保证多线程在同一个时刻只能有一个线程获得对该同步变量的操作权限。(1)InterlockedExchangeAdd()LONG _转载 2016-08-25 22:38:25 · 1416 阅读 · 0 评论 -
C++多线程之使用Mutex和Critical_Section
Mutex和Critical Section都是主要用于限制多线程(Multithread)对全局或共享的变量、对象或内存空间的访问。下面是其主要的异同点(不同的地方用绿色表示)。下面是一些补充:l 请先检查你的设计,把不必要的全局或共享对象改为局部对象。全局的东西越少,出问题的可能就越小。l 每次你使用EnterCriticalSection时,请不要忘了在函数的所转载 2016-08-25 22:26:54 · 507 阅读 · 0 评论 -
CreateThread和_beginthread的区别及使用
CreateThread 是一个Win 32API 函数,_beginthread 是一个CRT(C Run-Time)函数,他们都是实现多线城的创建的函数,而且他们拥有相同的使用方法,相同的参数列表。 但是他们有什么区别呢?一般来说,从使用角度是没有多大的区别的,CRT函数中除了signal()函数不能在CreateThread创建的线城中使用外,其他的CRT函数都可一正常使用,但是如果在Cre转载 2016-08-25 21:58:58 · 642 阅读 · 0 评论 -
C++静态库和动态库
http://www.cnblogs.com/skynet/p/3372855.html转载 2016-08-25 21:27:36 · 269 阅读 · 0 评论 -
C++宏定义
一、define中的三个特殊符号:#,##,#@#define Conn(x,y) x##y#define ToChar(x) #@x#define ToString(x) #x(1)x##y表示什么?表示x连接y,举例说:int n = Conn(123,456); /* 结果就是n=123456;*/char* str = Conn("asdf", "adf"); /*结果就是 str =转载 2016-05-15 12:14:12 · 335 阅读 · 0 评论 -
const
const在C/C++中的特性是不一样的,今天只讲通用部分。const int a ; int const b; //两者等价。const值不能修改。const int *c;//修饰c指向的内存空间不能被写,但是可读。只读的。int * const d; //const修饰d,d是指针变量,所以d不能随便修改。但是与d所指的内存空间没有半毛钱关系。—常量指针。//const修饰谁,谁就不能改原创 2016-04-29 23:28:05 · 3116 阅读 · 2 评论 -
屏蔽控制台应用程序的窗口#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
众所周知,控制台应用程序一般都会显示一个控制台窗口(虚拟DOS窗口),但很多时候控制台程序的执行逻辑根本不需要与用户进行交互,所以显示这个难看的窗口纯属多余,那么如何将它屏蔽掉呢?下面我向大家介绍一种方法。操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。程序的默认入口点实际上是由连接程序设置的,不同的连接器选择的入口函数也不尽相 同。在VC下,连接器对控制台程序设置的入口函数是 mai转载 2016-04-28 23:10:46 · 6292 阅读 · 0 评论 -
C++函数后面加const关键字
1、非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误) 2、表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中, 任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用); 3、唯一的例外是对于mutable修饰的成员。 加了const的成员函数可以被非const对象和const对象调用转载 2016-04-07 22:51:12 · 645 阅读 · 0 评论 -
VS中警告等级的含义
关 : 关闭所有警告(/W0) : 关闭所有警告消息的显示。 1 级(/W1) : 显示严重的警告消息。 2 级(/W2) : 显示等级 1 警告以及某些不太严重的警告,如关于隐藏类成员的警告。这是命令行中的默认警告等级。 3 级(/W3) : 显示等级 2 警告以及某些不太严重的警告,如有关总是计算为真或假的表达式的警告。 4 级(/W4) : 显示所有等级 3 警告以及信息性警告转载 2016-03-22 23:31:44 · 3322 阅读 · 0 评论 -
在共享DLL中使用MFC 和在静态库中使用MFC区别
使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC 第一种顾名思义。第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件。第三种是将DLL中的相关代码写进EXE文件中,文件较大,但是可以在没有相关转载 2016-03-22 23:30:51 · 316 阅读 · 0 评论 -
C++中的const关键字详解
原文:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量: const 类翻译 2015-10-07 21:29:33 · 448 阅读 · 0 评论 -
#pragma once与#ifndef两种防止头文件二次编译的区别
#ifndef这种是最早期使用的方法,是基于语言的宏定义名字不能冲突的前提下的。这种方法不仅能保证同一个头文件不会被包含两次,也可以保证内容完全相同的两个文件也只能被包含一次。但是他优缺点,就是你的#ifndef 后面跟的宏名字和你程序中的其他宏名字发生了”撞车“,那么会出现以下两种后果第一种:file1头文件中有一个宏 //file1.h #define BOOK_H //宏名现在又有一个文转载 2016-03-22 13:35:02 · 557 阅读 · 0 评论 -
友元函数和友元类
当一个函数或者类想要访问另一个类中的私有成员的时候,有两种办法:1.该类提供访问该私有成员的接口,最简单的提供getX()方法。2.该有友元函数或友元类。1.友元函数的特点很明显: 有一个参数是友元类的指针或引用。友元函数的使用步骤: 1>在友元类中声明,关键字friend,必有一个参数为友元类的指针或引用。 2>在外部定义 3>在其他地方使用。class Test2{public:原创 2016-03-21 10:41:56 · 497 阅读 · 0 评论 -
C++中的GetTickCount()和Sleep()
GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD。GetTickCount函数的原型为:DWORD GetTickCount(void);它在winbase.h头文件中定义为:WINBASEAPI DWORD WINAPI GetTickCount(VOID);winbase.h已被包含进windows.h头文件中,所以要使转载 2016-03-31 20:13:28 · 3326 阅读 · 0 评论 -
_stdcall,_cdecl区别
(1) _stdcall调用 _stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈。 WIN32 Api都采用_stdcall调用方式,这样的宏定义说明了问题: #define WINAPI _stdcall 按C编译方式,_stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如。 (2转载 2016-03-29 14:25:57 · 258 阅读 · 0 评论 -
#ifdef DEBUG的理解
在工程设置里有一些设置会对该工程自动产生一系列的宏,用以控制程序的编译和运行。就好象楼上说的一样,如果你把代码夹在#ifdef DEBUG 和对应的 #endif 中间,那么这段代码只有在调试(DEBUG)下才会被编译。也就是说,如果你在RELEASE模式下,这些代码根本就不会存在于你的最终代码里头。你可以手动实现DEBUG的定义如:#define DEBUG那么你的 #ifdef DEBUG 就会转载 2016-01-06 23:03:53 · 741 阅读 · 0 评论 -
C++回调函数(1)--基本概念
今天讨论下C/C++中的回调函数。在理解“回调函数”之前,首先讨论下函数指针的概念。函数指针(1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向它。函数是存放在内存代码区域内的,它们同样有地址,因此同样可以用指针来存取函数,把这种指向函数入口地址的指针称为函数指针。(2)先来看一个Hello Wo转载 2016-04-11 22:32:58 · 410 阅读 · 0 评论 -
C++回调函数(2)--实现回调机制的几种方式
(1)Callback方式 Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种类型。比如下面的示例代码,我们在Download完成时需要触发一个通知外面的事件:#include <iostream>typedef void (__stdcall *DownloadCallback)(const char *pURL,转载 2016-04-11 23:19:21 · 5195 阅读 · 0 评论 -
虚析构函数
C++中经常使用父类指针指向子类对象,这是多态实现的基础。但是,如果对父类的析构函数不作特殊处理的话,会隐含一个内存泄露的问题。直接上代码://父类class AA{public: AA(int a =0 ) { this->a = a; std::cout<<"父类的构造函数\n"; } virtual ~AA() {原创 2016-03-26 12:44:31 · 274 阅读 · 0 评论 -
多线程
进程由两个部分组成: 1、操作系统用来管理进程的内核对象。内核对象: 是操作系统内部分配的一个内存块,该内存块也是一种数据结构,我们不能够直接访问,应用程序无法访问,只能使用windows提供的函数操作该内存块。2、地址空间 包含所有可执行模块或dll模块的代码和数据,还包括动态内存分配的空间。进程: 不活泼,只是线程的容器,是线程的执行环境。第一个线程 – 主线程。原创 2016-04-13 18:00:10 · 294 阅读 · 0 评论 -
对CRITICAL_SECTION理解的总结
很多人对CRITICAL_SECTION的理解是错误的,认为CRITICAL_SECTION是锁定了资源,其实,CRITICAL_SECTION是不能够“锁定”资源的,它能够完成的功能,是同步不同线程的代码段。简单说,当一个线程执行了EnterCritialSection之后,cs里面的信息便被修改了,以指明哪一个线程占用了它。而此时,并没有任何资源被“锁定”。不管什么资源,其它线程都还是可以访问的转载 2016-03-27 13:30:01 · 554 阅读 · 0 评论 -
C++中的map
1、map类似与C#中的字典,存储键值对 2、map重载了[],所以可以直接使用索引器访问其值,索引器中是键。 3、map中的条目是iterator类型,iterator被定义为map容器中的条目类型。iterator实际是一个指针,可以++,–。 4、map.begin()返回第一个条目,map.end()返回最后一个条目的下一个条目。 5、map中存储条目的顺序是有序的,即存储的顺序和取原创 2016-03-26 23:43:31 · 479 阅读 · 0 评论