04 2011 档案
摘要:本文介绍malloc和free函数的内容。 在C中,对内存的管理是相当重要。下面开始介绍这两个函数: 一、malloc()和free()的基本概念以及基本用法: 1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 关于分配失败的原因,应该有多种,比如说空间不足就是一种。 void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。 2、函数的用法: 其实这两个函.
阅读全文
摘要:在刚开始使用SCROLLINFO结构时感觉很不顺手,尤其其中的成员fMask理解不太深刻,经过查询资料才理解一二。 在使用滚动条功能时,如果要设置它的范围和位置可以用以前的函数,例如:SetScrollRange()、 SetScrollPos()、GetScrollRange()、GetScrollPos()等,但目前通常使用SetScrollInfo()与 GetScrollInfo(),使用这两个函数就要用到SCROLLINFO结构。 可以先定义一个SCROLLINFO结构变量si,用&si作为以上两个函数的参数。同BeginPaint()中的&ps、GetTextMet
阅读全文
摘要:GetHashCode 方法适用于哈希算法和诸如哈希表之类的数据结构。 GetHashCode 方法的默认实现不保证针对不同的对象返回唯一值。而且,.NET Framework 不保证 GetHashCode 方法的默认实现以及它所返回的值在不同版本的 .NET Framework 中是相同的。因此,在进行哈希运算时,该方法的默认实现不得用作唯一对象标识符。 GetHashCode 方法可以由派生类型重写。值类型必须重写此方法,以提供适合该类型的哈希函数和在哈希表中提供有用的分布。为了获得最佳结果,哈希代码必须基于实例字段或属性(而非静态字段或属性)的值。 用作 Hash...
阅读全文
摘要:本文介绍在Windows程序开发中的MessageBox详解。 我们在在Windows程序设计中经常会涉及到一个格式化消息框,其代码如下:#include <windows.h>#include <tchar.h> #include <stdio.h> int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ……){ TCHAR szBuffer [1024] ; va_list pArgList ; // The va_start macro (defined...
阅读全文
摘要:本文讲解如何使用多线程安全地使用.NET 中的Windows窗体控件。 使用多线程提高 Windows 窗体应用程序的性能时,必须注意以线程安全方式调用控件。 访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。.NET Framework 有助于在以非线程安全方式访问控件时检测到这一问题。在调试器中运行应用程序时,如果创建某控件的线程之外的其他线程试图调用该控件,则调试器会引发一个 InvalidOperation...
阅读全文
摘要:本实例是一个基于TCP的简单通讯实例,分为服务器端和客户端,服务器端监听客户端的连接请求,客户端将信息发送给服务器端,而服务器端则回复客户端发送的信息以达到通讯测试:服务器端代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Net;usingSystem.Net.Sockets;namespaceSimpleTcpServer{classProgram{staticvoidMain(string[]args){//接收到的数据intreceive;//定义
阅读全文
摘要:在程序设计中,涉及数据存储和数据交换的时候,不管是B/S还是C/S模式 ,都有这样一个概念:数据库服务器。这要求一台性能和配置都比较好的主机作为服务器,以满足数目众多的客户端进行频繁访问。但是对于一些数据交换的要求不 主同,而且涉及到的通讯个体数目不多,如果还采用“一主机多客户机”的模式,便要求一台硬件配置良好而且软件上安装了相关数据服务软件,这样会造成硬件和 软件上的很多不必要的成本,这时Socket在点对点的平行对象之间的网络通讯的优势就就发挥出来了。 其实对于Socket通讯来说,服务器和客户端的界定不像数据库服务器与客户端那样明显,甚至可以说Socket通讯里面的服务器...
阅读全文
摘要:本文介绍Socket的基本知识。 TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。建立起一个TCP连接需要经过“三次握手”,详细见《计算机网络》。 SOCKET(套接字)是TCP/IP协议的网络通信的一种实现。包含进行网络通信必须的五种信息: 连接使用的协议(TCP/UDP) 本地主机的IP地址 本地进程的协议端口 远地主机的IP地址 远地进程的协议端口 通过SOCKET ,可以实现应用中的并发链接 建立SOCKET连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。...
阅读全文
摘要:本文主要是获得鼠标当前所在位置像素的颜色。说到这里,大家可能还记得PhotoShop中吸管的功能,就是在图片的某一位置点击一下,就能获得那个位置像素的颜色。此程序和吸管的功能相似,不妨先来看下运行效果图: 其代码如下所示:class CallWin32GDIAPI{ private const int SM_CXSCREEN = 0x00000000;//屏幕的横坐标 private const int SM_CYSCREEN = 0x00000001;//纵坐标 private const int SRCCOPY = 0x00CC0020;/...
阅读全文
摘要:在创建了DataSet对象以后,下面的事情就是向DataSet数据集中填充数据。目前最常用的数据填充方式是和数据库结合起来使用的,使用DataAdapter对象填充DataSet。在本节中会介绍到这种方式,另外还会介绍其他两种方式。 详细讲解 1.把数据库中的数据通过DataAdapter对象填充DataSet。这种是在数据库程序开发过程中最常用到的数据填充方式。使用这种方式主要用到DataAdapter对象的Fill和FillSchema两种方法来对数据集进行填充。下面开始详细讲解如何将数据从数据库加载到DataSet中。 DataAdapter 填充DataSet的过程分为二步:...
阅读全文
摘要:在做拖动小窗口程序时,遇到一个问题,怎么样对标题栏进行绘制,弄了半天才弄出来。和VC中原理差不多,但在.net下需要将API中的HDC通过Graphics.FromHdc()转换为System.Drawing.Graphics 程序运行结果如下: 代码如下: /// <summary> /// 对窗口的标题栏进行重绘和设置 /// </summary> /// <param name="hwnd"></param> /// <returns></returns> [DllImport("Use
阅读全文
摘要:typedefstruct_SHELLEXECUTEINFO {DWORD cbSize;ULONG fMask;HWND hwnd;LPCTSTR lpVerb;LPCTSTR lpFile;LPCTSTR lpParameters;LPCTSTR lpDirectory;intnShow;HINSTANCE hInstApp;LPVOID lpIDList;LPCTSTR lpClass;HKEY hkeyClass;DWORD dwHotKey;union{HANDLE hIcon;HANDLE hMonitor;} DUMMYUNIONNAME;HANDLE hProcess;} SH
阅读全文
摘要:本文介绍Windows API中的窗口注册类和消息结构的相关知识。 WNDCLASSEX窗口注册类: 结构体原型:typedef struct WNDCLASSEX { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTS...
阅读全文
摘要:本文介绍C/C++中堆,栈及静态数据区。 五大内存分区 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。下面分别来介绍: 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。 自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。 全局/静态存...
阅读全文
摘要:博客已从百度上成功移到了博客园(http://www.cnblogs.com/hanyonglu/)上了,欢迎大家访问! ^_^
阅读全文