windows编程
文章平均质量分 81
blpluto
这个作者很懒,什么都没留下…
展开
-
动态链接库(DLL)的使用
例1: DLL编写: Dll1.h #ifndef DLL1 #define DLL1 _declspec(dllexport) int Add(int x,int y); //Add #endif Dll1.cpp #include "Dll1.h" int Add(int x,int y) { return x + y; } Dumpbin: 1 0 00011078 ?Add@@YAHHH@Z = @ILT+115(?Add@@YAHHH@Z) DLL调用1: (包含L原创 2010-07-06 01:43:00 · 4109 阅读 · 1 评论 -
深入解析父子线程
说起多线程,我们可以说起一大堆和它相关的有趣话题来,比如什么子孙线程关系,父子线程关系,线程同步异步之类的研究话题来,而我今天所说的,是关于父子线程的一些有趣现象。 首先提出一个问题,“在多线程的应用程序中,当父线程结束之后,子线程会不会退出呢?”,本文将围绕这个问题,深入分析windows中父子线程的生命周期及他们之间的关系。 我们知道,不管你使用的是何种编程语言,但当我们在windows下编程,且使用了平台相关性的库的时候,不管我们使用什么函数来创建线程,最终的结果是,我们的代码中都会原创 2010-10-20 01:18:00 · 13066 阅读 · 2 评论 -
多线程编程(三)——AfxBeginThread
在MFC中,我们可以用到的一个API是AfxBeginThread,它的函数声明原型如下: CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_A原创 2010-07-28 08:38:00 · 3780 阅读 · 1 评论 -
多线程编程(二)——_beginthreadex
对于C++运行库,Microsoft的C++运行库为我们提供了2个API函数: uintptr_t _beginthread( void( *start_address )( void * ), unsigned stack_size, void *arglist ); uintptr_t _beginthreadex( void *security, unsigned stack_siz原创 2010-07-27 07:25:00 · 5989 阅读 · 0 评论 -
多线程编程(一)——CreateThread
操作系统提供的SDK API CreateThread原型如下: HANDLE WINAPI CreateThread( __in LPSECURITY_ATTRIBUTES lpThreadAttributes, __in SIZE_T dwStackSize, __in LPTHREAD_START_ROUTINE lpStartAddress, __in LPVOID lpParameter原创 2010-07-27 03:10:00 · 3406 阅读 · 1 评论 -
让你的程序更加适用——使用ANSI和UNICODE导出函数
继前两篇文章之后,我们更加关心的问题是,我们可能为了方便他人的使用,需要提供ANSI和UNICODE版本的函数,此时,我们可以模 仿Windows的作法,我们只编写UNICODE版本的函数,然后在ANSI版本的函数中,我们把多字符转换成UNICODE字符串,然后调用UNICODE版 本的函数,完成之后,再把他还原成多字符集的字符串。 此处,引用示例,逆转字符串中所有字符的函数: 然后,我们可以在发布的.h头文件中,这样定义函数: 这样,使用我们函数的人,也就原创 2010-07-22 06:49:00 · 1529 阅读 · 0 评论 -
UNICODE和ANSI字符串的转换
继上集故事《多字符集(ANSI)和UNICODE及字符串处理方式准则 》,我们现在有一些特殊需求: 有时候我们的字符串是多字符型,我们却需要使用宽字符型;有的时候却恰恰相反。 Windows为我们提供了这样的函数来处理这个问题: 1.MultiByteToWideChar 函数功能:该函数映射一个字符串到一个宽字符 (unicode)的字符串。由该函数映射的字符串没必要是多字节字符组。 函数原型:int MultiByteToWideChar(UINT CodePage,原创 2010-07-22 06:38:00 · 4043 阅读 · 0 评论 -
多字符集(ANSI)和UNICODE及字符串处理方式准则
在我们编写程序的时候,使用最多的是字符串的处理,而ANSI和UNICODE的相互转换经常搞的我们头晕眼乱。 应该说UNICODE是一种比较好的编码方式,在我们的程序中应该尽量使用UNICODE编码方式,我们在编写程序的时候,最好能依据下面的准则来进行: 基本准则: 1.将文本字符串想象为字符数组,而非char或字节数组 2.开始使用通用数据类型来表示文本字符和字符串(如TCHAR,PTSTR) 原因是我们可以在WinNT.h的头文件中找到如下定义(代码有删改): #ifndef VOID原创 2010-07-22 05:52:00 · 2706 阅读 · 0 评论 -
文件操作系列之四——(CFile类的文件操作)
CFile提供的是一种无缓冲的二进制文件输入输出服务,他还可以通过他的派生类来支持文本文件和内存信息的传输。 你可以使用CFILE的和他的派生类来操作硬盘的标准I / O流操作,你还可以使用ofstream或其他微软的iostream类格式化文本文件之后在传输磁盘文件。 通常,一个文件通过CFILE的构造函数自动的打开,通过他的析构函数自动的销毁关闭。而他的静态成员函数可以让你在不打开文件的情况下就可以访问文件的状态。 下面直接上代码说明: 读文件: 写文件:原创 2010-07-13 08:11:00 · 1184 阅读 · 0 评论 -
文件操作系列之一——(C Run-Time Library)
现在要做一个东西出来,因为涉及的知识面比较广,所以需要系统的把知识整理一下,刚好用到文件操作这一块,就整理了一下相关的要点。 操作文件的方式很多,这里重点介绍几个,本次介绍C Run-Time Library的文件操作方式。 C Run-Time Library中操作文件的方式又有两种,一种是直接使用库的API来进行;一种是使用FILE的I/O标准流操作来进行。下面分别说明。 一使用C Run-Time Library库的API来操作文件。因为C Run-Time Library原创 2010-07-13 07:12:00 · 2026 阅读 · 0 评论 -
文件操作系列之六——(CArchive的文件操作)
下面介绍一种特殊的文件操作方式——CArchive。 CArchive的介绍: Allows you to save a complex network of objects in a permanent binary form (usually disk storage) that persists after those objects are deleted. CArchive does not have a base class. Later you can load the object原创 2010-07-14 02:27:00 · 6319 阅读 · 0 评论 -
文件操作系列之五——(CStdioFile的文件操作)
前面介绍了CFile类对文件的操作方式,本篇来介绍CStdioFile对文件的操作。 直接看这个类的源代码,我们可以发现,这个类是从CFile继承过来的。不过,CStdioFile的最大好处是他读写文件的方式是按照行来进行的。 当你把(0x0A)写入文件的时候,他会写入一对字符(0x0D, 0x0A),而当你读取的时候,他又给你把这一对字符转换成(0x0A)的单一字节。 虽然CStdioFile继承自CFile,但此处应该注意的是,CFile中的Duplicate, LockRan原创 2010-07-13 08:25:00 · 2384 阅读 · 0 评论 -
文件操作系列之三——(windows中的文件操作)
前面介绍了标准C++和C Run-Time Library中文件操作的方式,缺点显而易见,很多的东西和验证需要我们自己进行。 在windows中,系统封装了这些运行库,然后给了我们几个可供使用的API来操作文件。 同样的,windows的SDK大多是面向过程的封装。下面直接上代码: 读文件: 写文件: 示例代码同样简单,不过需要注意的是他们的参数,参数的意义可以参考MSDN的说明,上面有非常详细的描述和例子。 由于我的工程属性是U原创 2010-07-13 07:45:00 · 972 阅读 · 0 评论 -
文件操作系列之二——(标准C++文件流)
本篇开始介绍面向对象的方式处理文件的方式,不过缺点是开始依赖操作系统和环境,如后面所述的SDK依赖于windows,而CStdioFile依赖于MFC框架语言。 标准C++中操作文件流的方式是Ifstream和Ofstream的输入流和输出流文件类。要使用他们,你可以直接包含fstream头文件,当然也可以根据需要引用他们各自的头文件。 在fstream中,最重要的操作是重载了文件输入流运算符>>和文件输出流原创 2010-07-13 07:21:00 · 2054 阅读 · 0 评论 -
Windows编程中的错误处理
Windows编程中获得错误信息 在windows编程中我们的函数往往不如我们想象的那样工作,他经常会出现很多这样那样的问题,一般情况下,我们可以通过他们的返回值来得到他们到底是否发了小脾气: Windows常见的返回值类 型:1) VOID:表明该函数运行不可能失败,Windows函 数的返回值很少是VOID。2) BOOL:如果函数运行失败,返回值是0,否则 返回值是非0值。最好对返回值进行测试,以确定它是0还 是非0,而不是测试返回值是否是TRUE。3) HANDLE:如果原创 2010-07-09 03:47:00 · 1544 阅读 · 0 评论 -
Socket套接字编程(二)——UDP编程
TCP编程完了,下面轮到UDP了,这个是面向无连接的,更加简单。 先熟悉下流程: UDP型套接字: 服务器端(接收端)程序: 1、创建套接字(socket)。 2、将套接字绑定到一个本地地址和端口上(bind)。 3、等待接收数据(recvfrom)。 4、关闭套接字。 客户端(发送端)程序: 1、创建套接字(socket)。 2、向服务器发送数据(sendto)。 3、关闭原创 2010-07-09 02:29:00 · 2054 阅读 · 0 评论 -
Socket套接字编程(一)——TCP编程
开始研究网络编程,先从套接字编程开始,这个简单,不过也得会才行。随手写点代码先练练手,没多少技术含量。 服务器端代码: #include #include using namespace std;#pragma comment(lib, "WS2_32.lib")int StartTCPSrv(){#pragma region 初始化套接字库 WSADATA wsaData; int iResult = WSAStartup原创 2010-07-09 02:19:00 · 11195 阅读 · 0 评论 -
在防火墙的例外中注册程序(Windows7和XP)
在写程序的时候,经常遇到被防火墙拦截的情况,尤其是一些网络程序,不管是对外访问还是外部连接,都会被拦截。 在大多情况下,Windows会静默拦截外部对内的连接访问,而内部对外的访问会提示用户信息。 现在我们需要把自己的程序加入到防火墙的例外之中去,好让程序之间能够正常通信。 第一种方法是读写注册表的方式: XP下是这几个键值(有的时候貌似只用2个键就行,但情况不同,最保险的方式是这4个键都写): 1. HKEY_LOCAL_MACHINE/SYSTEM/CurrentCon原创 2010-11-01 07:29:00 · 10590 阅读 · 1 评论