
Win32
文章平均质量分 56
pizi0475
这个作者很懒,什么都没留下…
展开
-
线程通信
线程之间交换信息称为线程通信。线程之间要传送的数据较多,必须使用如共享主存、管道流等通信方式。管道用来把一个程序输出连接到另一程序输入。java.io中提供了PipedInputStream和PipedOutputStream类作为管道的输入输出部件。线程使用管道通信一般分为三步:创建输入输出管道流;连接输入输出流管道;向输出流管道写和从输入流管道读。1.创建管道流PipedInp转载 2010-02-25 09:06:00 · 1272 阅读 · 0 评论 -
windows 内核对象
单地说: 内核对象是系统的一种资源。系统对象一旦产生,任何应用程序都可以开启并且使用该对象。系统给内核对象一个计数值作为管理只用,内核对象包括: event,mutex,semaphore,file,file-mapping,preocess,thread.这些内核对象每次产生都会返回一个handle,作为标示,每使用一次,对应的计数值加1,调用CloseHandle可以结束内核对象的使用。转载 2010-03-03 09:10:00 · 1427 阅读 · 1 评论 -
进程和Windows程序的基本概述
一般进程可以定为一个正在运行的程序的一个实例, 一个内核对象,操作系统可以用它来管理进程。也是系统保存进程统计信息的地方。 一个地址空间,其中包含了可执行文件和DLL模块的代码数据,同时包括动态内存分配,和线程堆栈和堆得分配。 CPU的工作方式,是 一个进程可以有多个线程..然后CPU会轮流调度资源分配给各个线程,就像一个时钟一样。 关于Windows应用程转载 2010-03-19 20:21:00 · 1444 阅读 · 0 评论 -
vc 编译lua5.1.1
vc 编译lua5.1.1一。编译lualib(静态库/动态库): 把所有文件添加进来,然后去掉 a. lua.c,lua.h;它们是用来编译解释器的。 b. luac.c,print.c;它们是用来编译lua编译器的。说明: lua以前一般将此分成core lib和standard lib,其中所有带lib字串的文件 都是standard lib的。对于使用都一般core转载 2010-03-20 09:27:00 · 2372 阅读 · 1 评论 -
Win32编程笔记
Afxenddeferregisterclass wincore.cpp注册窗口类 Device context HDC DC的句柄 CDC 客户区句柄类,封装了作图函数 CclinetDC CWindowDC CPen类,画笔的封装 CDC::setROP2()设置绘画模式 创建光标插入符号 Cwnd::createsolidcaret() Showcar转载 2010-03-19 11:13:00 · 1727 阅读 · 0 评论 -
Win32常用函数
1、限制程序功能函数1、EnableMenuItem 允许、禁止或变灰指定的菜单条目2、EnableWindow 允许或禁止鼠标和键盘控制指定窗口和条目(禁止时菜单变灰)2、对话框函数CreateDialog 从资源模板建立一非模态对话窗CreateDialogParam 从资源模板建立一非模态对话窗CreateDialogIndirect 从内存模板建立一非模态对话窗CreateDialog转载 2010-03-19 11:18:00 · 2057 阅读 · 0 评论 -
win32编程常用的数据类型
win32编程常用的数据类型有: HANDLE 定义一个32位无符号的整数,用作句柄 HINSTANCE 定义一个32位的无符号整数,用作实例句柄 HWND 定义一个32位的无符号整数,用作窗口句柄 HDC 一个设备描述背景的句柄 LONG 说明一个32位带符号整数 LPSTR 定义一个线性的32位字符串指针 UINT 定义一个新的Win32数据类型,它会把一个参数转载 2010-03-19 11:18:00 · 1902 阅读 · 0 评论 -
Win32常用的 类型和宏
Win32常用的 类型和宏COLORREF1、结构定义一个COLORREF 型颜色值是定义了一种颜色的长整数。要求一个颜色参数的GDI函数(比如CreatePen和FloodFill)接受COLORREF值作为参数。2、结构说明根据应用程序对COLORREF类型值的不同使用方式,该类型值具有三种不同的形式。它可以定义为下列三种方式之一:(1)直接定义RGB值其中低位字节包含了定义红色的相对强度转载 2010-03-19 11:20:00 · 1587 阅读 · 0 评论 -
使Win32程序更安全的15个小技巧
1、留意危险的函数一些函数是非常危险的,不恰当地使用这些函数可能导致缓冲区溢出,如果你幸运的话,可能这只会导致你自己的应用程序崩溃。如果不走运的话,可能会导致恶意代码入侵你的系统。下面是一些常见的需要留心的函数:strcpy (and variants such as lstrcpy, wcscpy, etc.)转载 2010-03-19 11:24:00 · 1532 阅读 · 0 评论 -
Win32/C++试题
一、单项选择题:(共12题,每题2分,共24分)1. 下面哪一个不是C++的标准数据类型? ( )A. int B. charC. bool D. real2. break关键字在哪一种语法结构中不能使用? ( )A. for语句转载 2010-03-19 11:16:00 · 2165 阅读 · 0 评论 -
WIN32-病毒的高级编写技巧
Author: whg Email: whg@whitecell.org Homepage:http://www.whitecell.org 1、超级病毒变形引擎 此段代码会在DATA段内生成一个解密代码。 .586p .model flat,STDCALL extrn ExitProcess: proc VirusSize=100h .data DecodeMethod dd ? DeCode:转载 2010-03-19 11:23:00 · 1410 阅读 · 0 评论 -
关于Callback函数
Author:Marius Bancila http://www.codeguru.com/Cpp/Cpp/cpp_mfc/callbacks/article.php/c10557/翻译by:AllenTing环境:C/C++/VC++ 简介 对于很多初学者来说,往往觉得回调函数很神秘,很想知道回调函数的工作原理。本文将要解释什么是回调函数、它们有什么好处、为什么要使用它们等等问题,转载 2010-03-22 16:40:00 · 1630 阅读 · 0 评论 -
OutputDebugString()
坚定的 Win32 开发人员可能对 OutputDebugString() API 函数比较熟悉,它可以使你的程序和调试器进行交谈。它要比创建日志文件容易,而且所有“真正的”调试器都能使用它。应用程序和调试器交谈的机制相当简单,而本文将揭示整件事情是如何工作的。本文首先是由以下事件促使的,我们观察到 OutputDebugString() 在管理员和非管理员用户试图一起工作或游戏时并不总是能可靠地转载 2010-03-24 13:57:00 · 1772 阅读 · 0 评论 -
环境变量
环境变量相当于给系统或用户应用程序设置的一些参数, 具体起什么作用这当然和具体的环境变量相关. 比如path, 是告诉系统, 当要求系统运行一个程序而没有告诉它程序所在的完整路径时, 系统除了在当前目录下面寻找此程序外, 还应到哪些目录下去寻找; 再如tc或vc++中, set include=path1;path2; 是告诉编译程序到哪里去找.h类型的文件; 当然不仅仅是指定什么路径, 还有其转载 2010-03-24 17:00:00 · 1274 阅读 · 0 评论 -
理解 Win32API-OutputDebugString 原理
理解 Win32API-OutputDebugStringWin32API OutputDebugString()可以使你的程序和调试器进行交谈,应用程序和调试器交谈的机制相当简单,而本文将揭示整件事情是如何工作的。 应用程序用法 文件声明了 OutputDebugString() 函数的两个版本:一个用于 ASCII;一个用于 Unicode;如果有调试器的话,使用一个N转载 2010-03-24 13:57:00 · 1963 阅读 · 0 评论 -
关于API的DLL的搜索顺序问题
在调试应用端程序时,偶然发现很奇怪的现象,是关于被引用的MFC扩展DLL的使用问题,跟踪了老半天,总算找到问题所在,同时,也解除了以前存于心中的疑感,问题虽小,但很可能被忽视。问题: 将OCX与依赖的DLL置于同一目录下,并注册该OCX,这能保证使用正确吗? 初一看,感觉是这么回事,实则不然。我们来模拟一下场景: 假设控件A.ocx,控件 B.ocx,都依赖于MF转载 2010-03-24 17:24:00 · 1251 阅读 · 0 评论 -
__cdecl __fastcall与 __stdcall
Visual C++ Compiler Options可以指定的Calling Convention有 3种: /Gd /Gr /Gz 这三个参数决定了: 1.函数参数以何种顺序入栈,右到左还是左到右。 2.在函数运行完后,是调用函数还是被调用函数清理入栈的参数。 3.在编译时函数名字是如何转换的。 下面我们分别详细介绍: 1./Gd 这是编译器默认的转换模式,对一般函数使用转载 2010-03-24 08:40:00 · 1295 阅读 · 0 评论 -
Window 消息大全
消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg,它在Windows单元中是这样声明的:typeTMsg = p转载 2010-04-07 13:30:00 · 1160 阅读 · 0 评论 -
深入探索Win32结构化异常处理SEH
在Win32操作系统提供的所有功能中,使用最广泛而又没有公开的恐怕要数结构化异常处理(Structured Exception Handling,SEH)了。当你考虑Win32结构化异常处理时,也许会想到__try、__finally和__except等术语。可能你在任何一本讲解Win32的好书上都能找到关于SEH较为详细的描述,甚至Win32 SDK文档也对使用__try、__finally和_转载 2010-05-18 22:23:00 · 1408 阅读 · 0 评论 -
Win32 结构化异常处理(SEH)探秘
译注:本文都翻译了一大半了,才发现网上已经有一篇董岩的译本(http://www.diybl.com/course/3_program/c++/cppsl/200866/122881.html),看完他的译文,感觉所有涉及关键技术的地方董岩翻译得非常到位,所以自己就没有再花时间往下译,本文后面的部分基本上都是采用了董岩的译文。此外,董岩在译文后面附带有一篇附录,专门解释“prolog 和 epil转载 2010-05-18 22:31:00 · 1375 阅读 · 0 评论 -
四种进程或线程同步互斥的控制方法
<br />很想整理一下自己对进程线程同步互斥的理解。正巧周六一个刚刚回到学校的同学请客吃饭。在吃饭的过程中,有两个同学,为了一个问题争论的面红耳赤。一个认为.Net下的进程线程控制模型更加合理。一个认为Java下的线程池策略比.Net的好。大家的话题一下转到了进程线程同步互斥的控制问题上。回到家,想了想就写了这个东东。 <br /><br /> 现在流行的进程线程同步互斥的控制机制,其实是由最原始最基本的4种方法实现的。由这4种方法组合优化就有了.Net和Java下灵活多变的,编程简便的线程进程控制手段转载 2011-03-10 20:14:00 · 1518 阅读 · 0 评论 -
进程互斥
进程互斥目录定义实现进程互斥编辑本段定义 两个或两个以上的进程,不能同时进入关于同一组共享变量的临界区域,否则可能发生与时间有关的错误,这种现象被称作进程互斥. 在多道程序环境下,存在着临界资源,它是指多进程存在时必须互斥访问的资源。也就是某一时刻不允许多个进程同时访问,只能单个进程的访问。我们把这些程序的片段称作临界区或临界段,它存在的目的是有效的防止竞争条件又能保证最大化使用共享数据。而这些并发进程必须有好的解决方案,才能防止出现以下情况:多个进程同时处于临界区,临界区外的进程阻塞其他的进程,转载 2011-03-10 19:51:00 · 2713 阅读 · 0 评论 -
进程同步与互斥
<br />进程同步与互斥<br /> 首先,我们看一个例子:进程P1、P2公用一个变量COUNT,初始值为0<br /> <br /> P1、P2两个进程的执行顺序是随机的,P1、P2可能顺序执行或交错执行。<br /> 由图可见,不同的执行顺序,COUNT值会不同,这是不允许的。<br /> 在多道程序系统中,由于资源共享或进程合作,使进程间形成间接相互制约和直接相互制约关系,这需要用进程互斥与同步机制来协调两种制约关系。<br />1、临界资源:<br /> 然在多道程序系统转载 2011-03-10 20:05:00 · 2030 阅读 · 0 评论 -
进程的同步与互斥
<br />原文出自:<br />http://www.huihoo.com/os/process/main.htm<br />多进程的系统中避免不了进程间的相互关系。本讲将介绍进程间的两种主要关系——同步与互斥,然后着重讲解解决进程同步的几种机制。 <br /><br />进程互斥是进程之间发生的一种间接性作用,一般是程序不希望的。通常的情况是两个或两个以上的进程需要同时访问某个共享变量。我们一般将发生能够问共享变量的程序段成为临界区。两个进程不能同时进入临界区,否则就会导致数据的不一致,产生与时间有关的转载 2011-03-10 20:06:00 · 2226 阅读 · 0 评论 -
Windwos下的线程互斥和同步
<br />关键字: Windows、线程、互斥、同步<br />摘要:分析了“互斥”与“同步”在概念上的差异,简单介绍了Windows平台下的互斥、同步机制,详细讨论了生产者-消费者模型及其变形,以及容易出错的方面。<br /> <br />概述<br /> 网络多媒体应用系统同时包括网络传输、媒体采集和显示、媒体数据编解码、人机接口等多个紧密联系而又相对独立的组成部分,各部分之间需要并行协作才能正常运行,因此大量采用了多线程的运行模式。多线程模式对资源的访问提出了特殊要求。本文分析了线程“互转载 2011-03-10 20:09:00 · 1318 阅读 · 0 评论 -
线程安全
<br />什么是线程安全? 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 <br /> 或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。 <br /> 线程安全问题都是由全局变量及静态变量引起的。 <br /> 若每个线程中对全局变量、静态变量只有读操作,而无写操作,一转载 2011-03-24 21:28:00 · 1388 阅读 · 0 评论 -
模态对话框与非模态对话的几种销毁方法与区别
<br />最近在做win32调对话框,挺郁闷,找了好多文章研究,才发现非常简单。<br /> <br />先说下模式对话框调用的原则。<br />在模式对话框下,用CDialog::OnOK()或CDialog::OnCancel()以及CDialog::OnClose()关闭对话框。<br />一定要注意之前的CDialog::(当然,你可以重载你自己对话框的这个虚函数,但是,后面必须调用基类的CDialog::)<br />具体我们再参照深入浅出的风格,来个解刨。 <br />CDialog::Clo转载 2011-03-28 18:12:00 · 1898 阅读 · 0 评论 -
PostMessage和SendMessage的区别
<br />最近利用vc编写UDP通讯程序,对其中的消息机制进行了整理。vc中的消息处理与.net中不同。Net中都给我们封装好了,采用代理的方式可以进行操作。而在vc中,要自己写消息响应函数。<br />1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。而且,PostMessage的返回值表示PostMessage函数执行是否正确;而SendMes转载 2011-03-28 18:18:00 · 1626 阅读 · 0 评论 -
基于Socket的多线程和异步非阻塞模式编程
<br /> 刚开始接触socket的编程的时候,遇到了很多的问题,费了很大劲搞懂。其实往往都是一些比较基本的知识,但是都是很重要的,只要对其熟练的掌握后,相信对基于网络的编程会有很大的提高,呵呵。<br /> 就拿基于C/S结构的例子来说,我们先看看服务器和客户端的流程(异常处理就省略了):<br /> <br /> 服务器:<br /> //初始化<br /> WSAData wsaData;<br />转载 2011-03-28 18:24:00 · 3850 阅读 · 1 评论 -
memest常见的三种错误
<br />memest原型 view sourceprint?1void*memset(void*s, intc, size_tn);<br />memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。 <br />常见的三种错误 <br />第一: 搞反了c 和 n的位置. <br />一定要记住 如果要把一个char a[20]清零, 一定是 memset(a, 0, 20) <br />而不是 memset(a, 20, 0) <br />第二转载 2011-03-28 18:59:00 · 1816 阅读 · 0 评论 -
类对象与memset函数
memset某个结构或其它的数据类型在C语言中是非常常见,其目的是对结构或数据类型进行初始化,通常都是将变量置为0。在C++中,针对类对象除了用构造函数初始化对象外,也可以使用memset来进行初始化操作。当然这种情况极其少见,即使如此还是非常有必要谈一下这个问题。<br />下面是一个例子:<br />C++语言: Codee#1288501include<iostream><br />02<br />03classBase<br />04{<br />05 int_n;<br />06publi转载 2011-03-28 19:01:00 · 3214 阅读 · 0 评论 -
代码的中断级
<br />这是除了多线程安全性之外,常常困扰初学者的另一个问题。在用户态编程中,没有中断级的概念,这是因为用户态程序都运行在同一中断级。但是在内核编程中,就常常出现运行的代码处在不同的中断级的情况。<br />本书不探讨中断级的本质,只说明中断级的判断方法。读者现在需要了解的中断级主要有Passive级和Dispatch级两种,Dispatch级比Passive级高。在实际编程时,许多具有比较复杂功能的内核API都要求必须在Passive级执行,这一点在WDK的文档上有说明。比如下面的例子:Callers转载 2011-03-26 19:36:00 · 1867 阅读 · 0 评论 -
模态对话框和非模态对话框的区别
<br />如果是模态的,那么弹出后该程序的其它窗口就呈不可用的状态,原来程序暂停执行,直到这个模态窗口关闭后才回到原来程序继续。 <br />非模态的就是直接显示出来,然后原来的程序继续执行下面的语句,而且其它窗口也呈可用状态。<br />以下是具体的区别。<br /> <br />1:非模态对话框通常包含一个标题列和一个系统菜单按钮。当您在Developer Studio中建立对话框时,这些是内定选项。用于非模态对话框的对话框模板中的STYLE叙述形如:STYLE WS_POPUP | WS_CAPTI转载 2011-03-28 18:14:00 · 1837 阅读 · 0 评论 -
Socket编程中的同步、异步、阻塞和非阻塞
<br />Socket编程中的同步、异步、阻塞和非阻塞<br /> <br />2010-04-18 19:07<br />在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。下面是我对这些术语的理解。<br />同步<br />所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的转载 2011-03-28 18:25:00 · 1807 阅读 · 1 评论 -
使用新的线程池 API 提高可伸缩性
随着 Windows Vista® 的发布和 Windows Server® 2008 的即将问世,Microsoft 为托管应用程序的开发人员提供了改进的 Windows® 平台,它包含多种新技术,使得令原本 Windows 开发人员从中受益的改进能被广为利用。例如,自从 Windows 2000 发布以来,已是该平台组成部分的线程池组件经历了一次完整的体系结构重建。新的实现包含一个新的线程池 API,该 API 可以让开发人员更加轻松地编写正确的代码。传统的 API 仍受支持,所以传统的应用程序可以继续转载 2011-03-28 18:27:00 · 2343 阅读 · 0 评论 -
Widows API 终止线程,撤消线程,函数详解
终止线程两个函数:ExitThread 和 TerminateThread1 若要终止线程的运行,可以使用下面四种的方法:? 线程函数退出循环来返回 (最佳方法)。? 通过调用ExitThread 函数,线程将自行撤消(尽量不要使用这种方法)。? 同一个进程或另一个进程中的线程调用TerminateThread函数(最好避免使用这种方法)。? 该线程的主进程终止运行(避免使用)。下面将介绍终止线程运行的方法,并且说明线程终止运行时会出现什么情况。1.1 线程函数返回始终都应该将线程设计成这样的形式,即当转载 2011-03-28 18:28:00 · 2520 阅读 · 0 评论 -
Windows终止线程运行的四种方法
<br />终止线程运行<br /><br /> 若要终止线程的运行,可以使用下面的方法:<br /> ? 线程函数返回(最好使用这种方法)。<br /> ? 通过调用 ExitThread 函数,线程将自行撤消(最好不要使用这种方法)。<br /> ? 同一个进程或另一个进程中的线程调用 TerminateThread 函数(应该避免使用这种方法)。<br /> ? 包含线程的进程终止运行(应该避免使用这种方法)。<br /><br /> 下面将介绍终止线程运行的方法,并且说明线程终止运行时会转载 2011-03-28 18:30:00 · 2114 阅读 · 0 评论 -
sizeof在32位和64位机器上的运行结果
今早在网上偶然看到一篇文章《32位程序移植到64位平台前的准备工作》,文中介绍了32位平台的程序向64位平台进行移植需要注意的一些事项和操作建议。自己对于64位平台上各种数据类型分别占用多少字节,存在一些疑问,所以用C/C++中的sizeof分别在这两种平台上进行了测试。运行结果如下:(分别用蓝色和红色标记了两者的差异)——————————————————————————机器平台:转载 2012-03-14 12:52:23 · 2098 阅读 · 0 评论 -
Windows平台使用CodeBlocks和Wxwidgets搭建C++开发环境
对于Code::Blocks和wxWidgets本文就不多做介绍了,每个程序员心中都有一杆秤,其显赫的名声早已对其做了最好的诠释。本文将重点放在环境的搭建上,下面切入正题。一、安装前准备1、下载Code::Blocks,官网地址:http://www.codeblocks.org/,下载纯Code::Blocks,不要自带编译器的,文件名为codeblocks-10.05-setup.转载 2012-08-01 21:13:46 · 1803 阅读 · 0 评论 -
用VC写DLL
4.1一个简单的DLL 第2节给出了以静态链接库方式提供add函数接口的方法,接下来我们来看看怎样用动态链接库实现一个同样功能的add函数。 如图6,在VC++中new一个Win32 Dynamic-Link Library工程dllTest(单击此处下载本工程附件)。注意不要选择MFC AppWizard(dll),因为用MFC AppWizard(dll)建立的将是第5、6节要转载 2012-07-19 21:37:20 · 1481 阅读 · 0 评论