兜兜10

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

12 2010 档案

摘要:线程是由两个部分组成线程的内核对象(见:内核对象),操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。 线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量。 如果在单进程环境中,多个线程将共享单个地址空间,这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程而不是每个线程存在。 阅读全文
posted @ 2010-12-09 15:12 兜兜10 阅读(88) 评论(0) 推荐(0)

摘要:一、HOOK编程基本知识 HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId); 参数:idHook: 指定将要安装的钩子过程的类型。lpfn: 指向相应的钩子过程。如果参数dwThreadId为0,或者指定了一个其他进程创建的线程之标识符,那么 参数lpfun必须指向一个位于某动态链接库中的钩子过程。否则,参数lpfn可以指向当前进程相关的代码 中定义的一个钩子过程。 hMod: 指定lpfn指向的钩子过程所在的DLL的句柄。如果参数dwThreadId指定的线程由当前进程创建,并且相 阅读全文
posted @ 2010-12-09 15:09 兜兜10 阅读(94) 评论(0) 推荐(0)

摘要:一、Win32 DLL的创建和使用 1、从DLL中导出函数 _declspec(dllexport) int add(int a,int b) { return a+b; } _declspec(dllexport) int subtract(int a,int b) { return a-b; } 二、隐式加载DLL 选择【Project\Settings】菜单打开工程设置对话框,选择link选项卡,在"Object/library modules"选项编辑诓中输入dll1.lib 1、利用extern声明外部函数 extern int add(int a,int b); extern in 阅读全文
posted @ 2010-12-09 15:08 兜兜10 阅读(90) 评论(0) 推荐(0)

摘要:一、剪贴板 1、数据发送 BOOL OpenClipboard(); 打开剪贴板。 HANDLE SetClipboardData(UINT uFormat,HANDLE hMem); 向剪贴板中放置数据。 参数: uFormat: 指定剪贴板格式,这个格式可以是已注册的格式,或者是任一种标志的剪贴板格式。 hMem: 具有指定格式的数据的句柄。可以是NULL,指示调用窗口直到有对剪贴板数据的请求时,才提供指定剪贴板 的数据。 HGLOBAL GlobalAlloc(UINT uFlags, SIZE_T dwBytes); 参数:uFlags: 指定分配内存的方式。 dwBytes: 指定分 阅读全文
posted @ 2010-12-09 15:06 兜兜10 阅读(91) 评论(0) 推荐(0)

摘要:一、事件 1、创建事件 HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCTSTR lpName); 参数: lpEventAttributes:指向SECURITY_ATTRIBUTES结构体的指针,如果其值为NULL,则使用默认的安全性。 bManualReset:指定创建的是人工重置事件对象,还是自动重置事件对象。如果是人工重置对象,当线程等待到该对象的 所有权限之后,需要调用ResetEvent函数手动地将该事件设置为无信号状态;如果 阅读全文
posted @ 2010-12-09 15:03 兜兜10 阅读(63) 评论(0) 推荐(0)

摘要:一、基本概念 1.进程 程序: 程序是计算机指令的集合,它以文件的形式存储在磁盘上。 进程: 通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动。 2、进程组成 内核对象:内核对象是操作系统内部分配的一个内存块,该内存块是一种数据结构,其成员负责维护该对象的各种信息。 地址空间:包含所有可执行模块或者DLL模块的代码和数据。还包含动态内存分配的空间。 3、进程地址空间 系统赋予每个进程独立的虚拟地址空间。 4、线程的组成 内核对象: 操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。 线程栈 : 它用于维护线程在执行代码时需要的所有函数参 阅读全文
posted @ 2010-12-09 15:01 兜兜10 阅读(71) 评论(0) 推荐(0)

摘要:一、网络编程的相关函数 1、WSAStartup函数 通过WSAStartup函数来加载套接字库,有两个功能:一是加载套接字库,一是进行套接字库的版本协商,也就是确定使用的socket版本。 int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData); 参数: wVersionRequested: 用来指定准备加载的Winsock库的版本。高位字节指定所需要的Winsock库的副版本,而低位字节则是 主版本。通常版本号为:2.1,其中2是主版本号,1是副版本号。可以利用MAKEWORD(x,y)宏(其中x是 高位字节,y是地位字节)方便 阅读全文
posted @ 2010-12-09 14:57 兜兜10 阅读(106) 评论(0) 推荐(0)

摘要:一、const char* 和 char* const 1、const char* const char* 类型是指向常量的指针。 注意:const char* 等同于 char const *; 这样的指针不能修改指向的内存中的内容。 但可用修改其所指向的内存地址。 char ch[5]="lisi"; const char* pStr=ch; 这里定义的字符数组元数个数为5,而不是4!因为C语言中,对于常量字符串来说,它的最后都需要防止一个"\0"字符表示字符数组的 结束,因此这里的字符数组元素个数应该为5. *pStr='w'; 错误:不能对指针的内容进行修改。 pStr="wangw 阅读全文
posted @ 2010-12-09 14:54 兜兜10 阅读(95) 评论(0) 推荐(0)

摘要:一、容器 ——————————————————————————————————-------- | 头文件 | 内容 | ——————————————————————————————————-------- | vector | 总是在序列末尾添加和删除对象 ,可随机访问 | | | | ——————————————————————————————————--------- | deque | 具备在序列开头添加和删除功能 ,可随机访问| | | | ——————————————————————————————————————————— | list | 可以有效地在任何位置添加或 阅读全文
posted @ 2010-12-09 14:50 兜兜10 阅读(53) 评论(0) 推荐(0)

摘要:一、类的继承 派生类不继承的基类成员仅有析构函数、构造函数以及任何重载赋值运算符的成员函数。所有其他函数成员,连同基类的所有 数据成员,都将被派生类继承。 特别注意:析构函数、构造函数、重载赋值运算符是不能被派生类继承的。 1、派生类声明 class CBox { public: double m_Length; double m_Width; double m_Height; CBox(double lv=1.0,double wv=1.0,double hv=1.0): m_Length(lv),m_Width(wv),m_Height(hv){}; }; class CCandyB 阅读全文
posted @ 2010-12-09 14:41 兜兜10 阅读(131) 评论(0) 推荐(0)

摘要:一、结构体 1、结构体定义 struct BOOK { char Title[80]; char Author[80]; char Publisher[80]; int Year; }; 2、结构体变量声明 BOOK Novel; 3、初始化结构体 BOOK Novel= { "Paneless Programming", "I.C.Fingers", "Gutter press", 1981 }; 这些初始化值位于大括号内,相互之间以逗号分开,这种方式与为数组成员定义初值的方式完全相同。 4、访问机构成员 Novel.Year=1988; 5、使用指针处理结构 BOOk* pBook=NU 阅读全文
posted @ 2010-12-09 14:25 兜兜10 阅读(133) 评论(0) 推荐(0)

摘要:一、函数的结构 1、函数头的通式 return_type function_name(parameter_list) 2、按值传递参数 在按值传递机制中,我们指定的变量或者常量实参根本没有被传递给函数。而是系统创建这写实参的副本,并将这些副本用作 被传递的值。 3、传指针 在函数内,操作的是指针的副本,但是副本跟实参都存储的是实际操作数的地址,所以操作副本的内容也就是在操作实参的内容。 4、传递数组 编译器将数组名转换为指针,指向数组头部的指针副本通过安值传递机制被传给函数。 double average(double array[],int count); 传递数组函数的声明(可以处理任意 阅读全文
posted @ 2010-12-09 14:23 兜兜10 阅读(53) 评论(0) 推荐(0)

摘要:一、变量定义 变量名: 只包含A~z(大写字母和小写字母)、数字0~9和下划线。 并且必须以字母或者下划线开头。变量名最长2048个字符。平时使用最好控制在31个字符以内。声明变量: int value; 整形变量的定义形式。 int value=2; 整形变量定义初始化。 int vvalue(10); 整形变量定义初始化。 二、数据类型 1、整数变量 int在内存中占用4个字节。 short在内存中占用2个字节。 long在内存中占用4个字节。 2、字符变量 char在内存中占用1个字节。 wchar_t在内存中占用2个字节。 3、布尔变量 bool 在内存中占用1个字节。 4、浮点变 阅读全文
posted @ 2010-12-09 14:20 兜兜10 阅读(91) 评论(0) 推荐(0)