windows程序设计
文章平均质量分 85
清楼小刘
这个作者很懒,什么都没留下…
展开
-
1.初探vs项目文件结构
刚下载完vs,那么肯定要先写第一个helloWorld,先体验一下IDE, 随之便生成了一个项目文件。项目文件的目录如图所示:我们先点进helloWorld文件夹中看看有什么:有ReadMe,那么先看看ReadMe的内容,如下:======================================================================原创 2017-09-08 11:18:51 · 4438 阅读 · 0 评论 -
《Windows核心编程》读书笔记(14) 第18章 堆栈
第18章堆栈对内存进行操作的第三个机制是使用堆栈。堆栈的优点是,可以不考虑分配粒度和页面边界之类的问题,集中精力处理手头的任务。堆栈的缺点是,分配和释放内存块的速度比其他机制要慢,并且无法直接控制物理存储器的提交和回收。从内部来讲,堆栈是保留的地址空间的一个区域。开始时,保留区域中的大多数页面没有被提交物理存储器。当从堆栈中进行越来越多的内存分配时,堆栈管理器将把更多的物理存储原创 2018-01-29 21:41:49 · 125 阅读 · 0 评论 -
《Windows核心编程》读书笔记(14) 第19章 DLL基础
第19章 DLL基础3个最重要DLL是Kernel32.dll,它包含用于管理内存、进程和线程的各个函数;User32.dll,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数;GDI32.dll,它包含用于画图和显示文本的各个函数。如果两个或多个应用程序使用同一个DLL,那么该DLL的页面只要放入RAM一次,所有的应用程序都可以共享它的各个页面。DLL与进程的地址原创 2018-01-29 22:40:33 · 183 阅读 · 0 评论 -
GDI+库编译报错
开发平台: vs2010程序类型: win32应用程序问题背景:一个完好的程序,加入下列几行代码之后就会编译报错:#include <GdiPlus.h>#pragma comment(lib, "gdiplus.lib")而且报的是系统文件里面的错误,让人摸不着头脑。如图:回想起之前在实习的时候也遇到过类似的错误,那这到底是怎么一回事呢?按照 http://blog.sina.co...原创 2018-03-01 10:49:46 · 1036 阅读 · 0 评论 -
Hook入门之鼠标钩子
之前有一次吃饭的时候,听前辈聊到猜想某某输入法的钩子,导致了我们软件crash了,问用户是不是用的某某输入法。当时就比较好奇钩子是啥。 一百度,也能发现网上有非常多的资料可以参考,阅读了一些资料,这里就用比较新手的语言去描述钩子,在系统的消息队列之前拦截消息,对消息进行修改或者拦截,或者原封不动,传递下去。当然,更好的教科书式学习是参考《Windows核心编程》的第22章《DLL注入和A...原创 2018-03-23 23:41:10 · 10686 阅读 · 3 评论 -
_CrtSetBreakAlloc使用
最快速度找到内存泄漏转载至许式伟2006年11月某日内存管理是C++程序员的痛。我的《内存管理变革》系列就是试图讨论更为有效的内存管理方式,以杜绝(或减少)内存泄漏,减轻C++程序员的负担。由于工作忙的缘故,这个系列目前未完,暂停。 这篇短文我想换个方式,讨论一下如何以最快的速度找到内存泄漏。 确认是否存在内存泄漏我们知道,MFC程序如果检测到存在内存泄漏,退出程序的时候会在调试窗口提醒内存泄漏。...转载 2018-03-29 22:20:40 · 3273 阅读 · 0 评论 -
VC使用CRT调试功能来检测内存泄漏
VC使用CRT调试功能来检测内存泄漏 转载至作者:JerryZC/C++ 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:“最大的长处也可能成为最大的弱点”,那么 C/C++ 应用程序正好印证了这句话。在 C/C++ 应用程序开...转载 2018-03-29 22:37:14 · 198 阅读 · 0 评论 -
Object seilcing 对象切割测试
Object seilcing 对象切割测试阅读侯杰的《深入浅出MFC》里面提到的虚函数的一章,提到了对象切割: 即将一个子类强制转换成父类时,它会把该对象的子类部分切割掉 比如,考虑这样一条强制转换语句: (CFahter) CChldObject.MemberFunc(); 会将子类对象强制转换成父类对象——它会产生一个临时对象,调用了拷贝构造函数 考虑到我写的如下测试代码: ...原创 2018-06-26 15:18:39 · 412 阅读 · 0 评论 -
windows下的各种字符串
在windows C++的环境下,会接触到好多种字符串类型:C++的std::string, std::wstring, char*, wchar*, windows的LPCTSTR,MFC的CString.....先来说说C++入门时最早接触的: std::string类和char*string是一个类,用起来非常方便,char*转成std::string的几种方法:char ...原创 2018-02-10 19:39:17 · 1089 阅读 · 0 评论 -
windows下的各种字符串
在windows C++的环境下,会接触到好多种字符串类型:C++的std::string, std::wstring, char*, wchar*, windows的LPCTSTR,MFC的CString…先来说说C++入门时最早接触的: std::string类和char*string是一个类,用起来非常方便,char*转成std::string的几种方法:char szName[10...原创 2019-04-13 13:12:08 · 614 阅读 · 0 评论 -
《Windows核心编程》读书笔记(六) 第9章 线程与内核对象的同步
第9章 线程与内核对象的同步用户方式同步的优点是它的同步速度非常快。如果强调线程的运行速度,那么首先应该确定用户方式的线程同步机制是否适合需要 互锁函数家族只能在单值上运行,根本无法使线程进入等待状态。可以使用关键代码段使线程进入等待状态,但是只能用这些代码段对单个进程中的线程实施同步。还有,使用关键代码段时,很容易陷入死锁状态,因为在等待进入关键代码段时无法设定超时值。 内核原创 2018-01-21 18:45:00 · 209 阅读 · 0 评论 -
《Windows核心编程》读书笔记(七) 第13章 Windows的内存结构
第13章 Windows的内存结构进程的虚拟地址空间每个进程都被赋予它自己的虚拟地址空间。对于32位进程来说,这个地址空间是4GB,因为32位指针可以拥有从0x00000000至0xFFFFFFFF之间的任何一个值。 在Windows2000中,属于操作系统本身的内存也是隐藏的,正在运行的线程无法访问。这意味着线程常常不能访问操作系统的数据。 虚拟地址空间如何分区N原创 2018-01-21 21:16:52 · 182 阅读 · 0 评论 -
2.创建窗口
windows是关于窗口,即window的编程,在这个系列学习中,我都是参考 C++技术网 的教学过程去学习的。我参考的是 窗口创建的过程: http://www.cjjjs.com/paper/czxt/2015819111149987.html加了我自己的注释的学习代码 WinMain.cpp:#include #include LRESULT CALLBACK Wnd原创 2017-09-30 13:01:19 · 201 阅读 · 0 评论 -
Unicode编码
接下来的一个任务是,使用STL读取ini文件。由于ini文件是Unicode编码,肯定和以前学习的文件流字节流有区别。所以,首先需要了解Unicode编码的标准。在windows vista中,每个Unicode都使用UTF-16编码,UTF的全称是Unicode Transformation Format(Unicode转换格式)。UTF-16将每个字符编码为2个字节,或者说16位。原创 2017-12-13 00:16:16 · 395 阅读 · 0 评论 -
动态链接库之 隐式调用——vs手把手演示
首先要生成DLL吧。在vs中新建项目,选择win32项目,下一步,勾选 DLL, 导出符号:完成,就创建了该有的文件。主要看到2个文件,一个是dll的头文件,一个是dll的cpp文件:看到我们的头文件中,自带了一个函数:DLL_STATIC_API int fndll_static(void);// 下列 ifdef 块是创建使从 DLL 导出更简单的// 宏的标准方原创 2017-11-29 13:57:12 · 1888 阅读 · 0 评论 -
动态链接库之 显式调用——vs手把手演示
VS版本: 2013我们修改main.cpp中的代码如下:#include#include#include//这个是不需要lib文件的显式调用!typedef int(*lpFun)();using namespace std;int main(){ HINSTANCE hDll; //生声明一个DLL文件实例句柄 hDll = LoadLibrary(原创 2017-11-29 14:09:37 · 1693 阅读 · 0 评论 -
《Windows核心编程》读书笔记(五)
第8章 用户方式中线程的同步原子访问:互锁的函数家族线程同步问题在很大程度上与原子访问有关,所谓原子访问,是指线程在访问资源时能够确保所有其他线程都不在同一时间内访问相同的资源。 比如说对一个全局变量进行自增的操作。需要一种手段来保证值的递增能够以原子操作方式来进行,也就是不中断地进行。无论编译器怎样生成代码,无论计算机中安装了多少个CPU,它们都能保证以原子操作方式来原创 2018-01-20 16:27:07 · 135 阅读 · 0 评论 -
<Windows核心编程>读书笔记(十). 16. 线程的堆栈
第16章线程的堆栈系统会在你自己进程的地址空间中保留一些区域。每当创建一个线程时,系统就会为线程的堆栈(每个线程有它自己的堆栈)保留一个堆栈空间区域,并将一些物理存储器提交给这个已保留的区域。当调用CreateThread或_beginthreadex函数时,可以重载原先提交的内存数量。这两个函数都有一个参数,可以用来重载原先提交给堆栈的地址空间的内存数量。如果设定这个参数为0原创 2018-01-26 13:23:27 · 182 阅读 · 0 评论 -
《Windows核心编程》读书笔记(四)
第七章 线程的调度、优先级和亲缘性隔20ms左右,Windows要查看当前存在的所有线程内核对象。在这些对象中,只有某些对象被视为可以调度的对象。Windows选择可调度的线程内核对象中的一个,将它加载到CPU的寄存器中,它的值是上次保存在线程的环境中的值。这项操作称为上下文转换。——还记得大二的时候上操作系统课,上下文切换(期末考还考了翻译- -)也只是懵懵懂懂地知道,但是却不知道是如何原创 2018-01-20 11:24:48 · 189 阅读 · 0 评论 -
windows下字符串格式化的方法总结
日常开发中,经常需要用到字符串格式化,将某个数字放进字符串里面。最开始C语言时应该都使用过prinft:std::string strName = "aLi";int nAge = 23;printf("My name is %s. My age is %d", strName, nAge);但是printf是直接输出到控制台的,有时候我们需要在某些地方使用到,就需要用到字符串来存储这个...原创 2019-04-14 23:51:58 · 1619 阅读 · 0 评论