- 博客(43)
- 资源 (10)
- 收藏
- 关注
转载 va-start va_arg va_end
va_start和va_end使用详解 本文主要介绍va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的类型
2014-10-24 15:46:02
731
转载 ios 底层数据结构
过去的几年中涌现了大量的Objective-C开发者。有些是从动态语言转过来的,比如Ruby或Python,有些是从强类型语言转过来的,如Java或C#,当然也有直接以Objective-C作为入门语言的。也就是说有很大一部分开发者都没有使用Objective-C太长时间。当你接触一门新语言时,更多地会关注基础知识,如语法和特性等。但通常有一些更高级的,更鲜为人知又有强大功能的特性等待你去开拓。
2014-09-25 20:30:34
6709
原创 Objective-C底层数据结构
Objective-C底层数据结构Objective-C底层数据结构类的数据结构Class(指针)typedef struct objc_class *Class; /* 这是由编译器为每个类产生的数据结构,这个结构定义了一个类.这个结构是通过编译器在执行时产生,在运行时发送消息时使用.因此,一些成员改变了类型.编译器产生"char* co
2014-09-25 20:21:23
2759
原创 SHELLEXECUTEINFO
第一篇 SHELLEXECUTEINFO 和 ShellExecuteEx的使用 使用SHELLEXECUTEINFO和ShellExecuteEx,我也主要是在cab包的安装时使用的。基本上是这样使用的,如下: SHELLEXECUTEINFO ShellInfo; memset(&ShellInfo, 0, si
2013-07-05 11:06:05
1727
原创 directui库和winnt.h中相冲突
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h和directui库相冲突的解决方案是在winnt.h文件的288行添加#define POINTER_64 __ptr64即可
2013-04-16 14:46:22
920
原创 Interlocked系列函数运用----错误码的返回
Long g_lErrorID = 0;LONG _IN_SetLastError( LONG lError ) { return InterlockedExchange(&g_lErrorID, lError);}LONG _IN_GetLastError() { return g_lErrorID;}
2013-03-06 14:32:00
790
转载 SOCKET各种模型下并发数量
SOCKET各种模型下并发数量 今天在公司认真的看了一下SOCKET的编程,对其中一些编程模型的并发数量原来一直是半清不明,正好趁着做当前项目的机会把他理清,目前在SOCKET上的编程模型主要有以下几种(WIN为主,LINUX和UNIX用得较少):1、普通的阻塞和非阻塞编程。利用线程池技术和内存池,SOCKET池技术,基本可以处理一千五百个左右的SOCKET连接,但我们一
2013-03-05 19:05:59
1140
原创 动态库中数据可以为多进程共享的方法
如何使一个dll数据值可以为多进程共享?如何使动态数据库中的g_nvalue值为多进程共享呢?实例如下:#pragma data_seg("hookdll")int g_nvalue = 5; //必须要初始化#pragma data_seg()#pragma comment(linker,"/SECTION:hookdll,RWS") HOOK_API i
2013-03-04 19:12:20
1955
原创 HOOK 钩子编程
所谓钩子函数就是对windows下的如(键盘或鼠标)等消息的过滤处理,通过钩子回调函数来进行截留处理。 一共有两种类型的钩子:局部的和远程的。局部钩子仅钩挂您自己进程的事件。远程的钩子还可以将钩挂其它进程发生的事件。远程的钩子又有两种:钩子分两种, 一种是系统级的全局钩子; 一种是线程级的钩子.全局钩子函数
2013-03-04 19:05:23
985
原创 Windows下数据库访问技术ODBC
ODBC是windows下开发数据互联,它为windows下编写关系型数据库提供了一个统一的接口,由于不同的数据库有不同的API,应用起来比较麻烦,因此为了解决这种问题,特开发了ODBC,ODBC为多种数据库的开发提供了统一的API接口,可以处理不同数据库的客户应用程序,当前比较通用的数据库基本上都提供有ODBC数据库的驱动程序,也就是说数据库只有提供了ODBC驱动程序,才能使用ODBC接口进行开
2013-03-04 18:43:19
1138
转载 C++内存分配—new,malloc,GlobalAlloc详解
C++内存分配秘籍—new,malloc,GlobalAlloc详解 C++内存分配秘籍—new,malloc,GlobalAlloc详解 _______只为因内存分配而无法入眠的程序员1.new是标准
2013-03-04 10:54:44
1216
原创 互斥对象
windowsapi windows创建的对象为内核对象,所谓内核对象是由系统统一管理的,如线程,进程创建的信息是由 内核来管理,对内核管理的数据应用程序是无法进程操作的,只能通过API函数来进行间接的操作。 windowsAPI 互斥对象CreateMutex 实现线程间的同步, 如:HANDLE handle = CreateMutex( NULL, FALSE, "d
2013-03-01 17:36:52
743
原创 多进程共享动态链接库的原理
当多个进程共享dll时,其实内存中只保留一份dll代码,而每个进程调用dll的导出函数或类等等时是单独在进程的堆栈上分配空间的,也就是说每个调用dll的进程单独保留自己使用到的数据,各个进程互不影响。所谓的多进程共享其实就在内存中保留dll代码的空间内“做文章”,如多个进程共享一个dll时,使用LoadLibrary和GetProcAddress得到的地址是一样的,也说明内存中保留一份dll,每个
2013-02-28 19:25:41
6155
原创 DLL 的编写,导出函数
//在编程c++dll时 extern "C"和.def的作用 extern "c"是c++编译器在编译函数时以c编译器的方式处理函数名 而.def的作用也是告知编译器以.def导出的文件名的方式编译函数名动态链接库的使用有两种方式,一种是显式调用。一种是隐式调用。(1) 显式调用:使用LoadLibrayr载入动态链接库、使用GetProcAddress获
2013-02-28 14:35:04
19732
原创 C++标准库中的排序函数 sort和qsort
void qsort(数组名,数组长度,每个元素的大小,比较函数)其中比较函数 主要是决定是升序还是降序排列例如:int compare(void*a, void*b)#include { return *a-*b; 升序排列 return *b-*a; 降序排列 }
2013-02-22 16:01:55
945
原创 stl中vector和deque的比较
在这篇文章中我们覆盖了多种不同的情况来选择我们到底是该使用vector还是deque。让我们总结一下测试的结果看下面几个结论。当执行大数据量的调用push_back()的时候,记住要调用vector::reserve()。在实验一中我们研究了vector和deque在插入数据的情况。通过这些假设,我们可以看出deque分配的空间是预先分配好的,deque维持一个固定增长率,在vec
2013-02-22 15:45:04
1139
原创 开发框架SSH
框架集合~~SSH对应 strust spring hibernatestruts 采用MVC模式,主要是作用于用户交互spring 才用IOC和AOP~作用比较抽象,是用于项目的松耦合hibernate 是对象持久化框架,其实就是实体类和数据库表建立关系,操作类就会触发相应的sql语句,可以不用写任何sql语句,完成数据库编程
2013-01-29 16:08:29
542
转载 SSH
什么是SSH,SSH有什么好处什么是SSH? 传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你
2013-01-29 16:06:00
575
原创 CEdit控件对输入参数的控制,包括右键面板及快捷键的处理
#include "stdafx.h"#include "NumEdit.h"#define VK_CTRL_X 0x18 #define VK_CTRL_C 0x03#define VK_CTRL_V 0x16// CNumEditIMPLEMENT_DYNAMIC(CNumEdit
2013-01-23 20:04:30
1159
原创 GetFocus
返回现在焦点所在空间的一个句柄原型HWND GetFocus(VOID);只能在当前窗体所在的线程中使用 HWND hWnd = GetForegroundWindow(); if(!IsWindow(hWnd)) return NULL; g_pOldWndProc = (WNDPROC)GetWindowLong(hWnd, GWL_WNDPROC);
2013-01-23 11:33:37
4552
原创 Qt和MFC的比较
MFC(微软基础类库)是专门为windows设计的一个用于开发图形用户界面的类库。MFC或多或少使用了面向对象的方法包装了Win32的API,正因如此,这些API有时是C++,有时是C,甚至是C和C++的混合体。Qt这个C++的图形库由Trolltech在1994年左右开发。它可以运行在Windows,Mac OS X, Unix,还有像Sharp Zaurus这类嵌入式系统中。Qt是
2013-01-22 22:24:06
1679
原创 系统变量和用户变量及其运用
设置过程如下: 我以win7为例,XP也是一样的,叫法不一样而已; 系统变量和用户变量,功能是一样的,只是权限不同罢了,见名知意…… 系统变量或者用户变量,名字必须和应用程序的名字一样右击计算机属性——高级系统属性 点环境变量(N)2011-7-30 00:45 上传下载附件(46.1 KB)
2013-01-22 15:39:58
762
转载 MinGw
MinGW简介MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环 境,它是Minimalist GNU on Windows的略称。这里的“纯粹”是指「使用msvcrt.dll的应用程序」。无法使用MFC (Microsoft Foundation Classes微软基础类库)。注:msvcrt.dll(名称:Microsoft C Runtime L
2013-01-22 14:03:02
789
转载 select和iocp模式
winsock的阻塞和非阻塞通信模型摘要:在应用程序开发中,经常涉及各式各样的机器的交互通信问题。在Windows操作系统下,可以使用MFC中的CSocket,也可以使用以Windows Api为基础的Winsock等等。本文主要描述了Winsock的两种实现方式,即阻塞方式和非阻塞方式。并对应这两种方式,描述了Select模式和IOCP模式。关键字:Winsock Blockin
2013-01-22 10:15:36
6063
原创 UTF-8和ASCII
UTF-8和US-ASCII的区别 UTF-8 包括 US-ASCII 和多字节编码。与普通的多字节编码不同,UTF-8的字节长度不固定,对于ASCII, 字节长度为1, 对于中文,阿拉伯文等,可以是2,3或更多字节,这样能有效节省存储空间. 它还与很多传统编码标准兼容,所以很受欢迎.
2013-01-21 19:18:41
4629
转载 数字签名和数字证书
数字签名是什么?今天,我读到一篇好文章。它用图片通俗易懂地解释了,"数字签名"(digital signature)和"数字证书"(digital certificate)到底是什么。====================================================数字签名是什么?原文网址:http://www.youdzone.com/signa
2013-01-21 16:36:14
2880
原创 多线程,线程创建及关闭句柄存在的问题,终止线程的运行的几个函数
多线程的编程在Win32方式下和MFC类库支持下的原理是一致的,进程的主线程在任何需要的时候都可以创建新的线程。当线程函数执行完任务后,自动中止线程;当进程结束后,所有的线程都中止。在Windows的一个进程内,包含一个或多个线程。线程是指进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等等。一个进程内的所有线程使
2013-01-21 14:28:00
6976
原创 需要研读的书
C++并行与分布式编程 POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX 是为了读音更像 UNIX)。电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植
2013-01-21 09:31:15
641
原创 GDI+环境配置及运用
一,首先加载gdi+库,目前一般windows系统都有#include #pragma comment(lib,"gdiplus.lib")using namespace Gdiplus;二,在程序加载时(一般在OnInitialDlg或者InitiInstance)ULONG_PTR m_gdiplusToken; GdiplusStartupInput gdiplu
2013-01-18 19:49:35
644
转载 C++派生类构造函数和析构函数调用顺序
++派生类构造函数调用顺序(详解)我们来看下面一段代码: class B1 { public: B1(int i) {cout }; class B2 { public: B2(int j) {cout }; class B3 { public: B3(){cout }; class C: publ
2013-01-18 16:06:20
866
转载 CObArray的介绍
CObArrayCObArrayCObArray CObArray CObject └CObArray CObArray类支持CObject指针数组。这些对象数组近似于C中的数组,但不同的是它们可以动态地增减。 数组索引总是开始于位置0。你可以决定是否固定数组上界,或当增加元素超过了当前边界后,是否允许数组扩展。内存分配给数组上界的邻近值,而不管某些元素是否为空。
2013-01-17 10:41:17
6379
转载 CArray类的方法介绍
CArray的用法templateclass CArray:public CObject参数 ARG_TYPE可以不使用其实就是carray类对象内部函数参数的实现为const,在carray类对象声明时可以不指定ARG_TYPE参数TYPE 模板参数指定存储在数组中的对象的类型。TYPE是一个由CArray返回的参数。ARG_TYPE 模板参数指定
2013-01-17 10:34:33
865
原创 MFC的串行序列化的实现
序列化就是存储对象数据,反序列化就是读取保存的对象数据mfc的串行序列化的实现几个必要条件1.类对象必须要直接或间接继承cobject对象2.类中要有默认的构造函数3.类中要有DECLARE_SERIAL( 类名)的声明,类实现的外部要有IMPLEMENT_SERIAL( 类名, 直接继承的类, 1)4.类要继承cobject的虚函数实现virtual void Seriali
2013-01-17 09:57:22
541
原创 debugview + outputdebugstring 调试程序 同时也可以输出调试日志文件
下载一个最新版的debugview调试器outputdebugstring是window下的api函数,支持unicode和ascii编码,可以再debug和release下显示信息outputdebugstring使用包含头文件windowl.h即可,调试程序时若再debugview下显示调试信息,需要关闭其它的调试器。outputdebugstring参数是以\0结束的字符串,若要
2013-01-16 10:10:00
4476
原创 窗口关闭过程,非模态对话框为什么不能使用enddialog关闭窗口
对于模态对话框DoModal出来的,删除对话框时用cdialog::onok()或者cdialog::oncancle(),这些函数调用之后并没有删除对话框,而是设置了操作系统对话框的结束标志,当操作系统检测到这个标志后,就结束该对话框的消息循环,同时也去释放掉对话框里面的资源。若要退出时提示是否要退出,可在onclose()、onok()、oncancel()中做处理,而不能再响应wm_de
2013-01-15 20:27:12
6479
原创 注册窗口类 registerclass
window把窗口以不同的类别进行设计,通过不同的类别来管理不同的资源,体现模块化管理的思想。以mfc为例Button类别有ccheckbox,cbutton,radiobutton等 ,Static类别有cstatic、staticgroup等。 一个应用程序在创建某个类型的窗口前,必须首先注册该“窗口类”(Windows Class)。注意,这里不是C++类的类。Register Wi
2013-01-14 21:16:40
7198
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人