自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(26)
  • 收藏
  • 关注

原创 COM组件设计与应用(二)

<br />COM组件设计与应用(二)<br />GUID 和 接口<br /><br />作者:杨老师<br />一、前言<br /><br />书接上回,话说在 doc(Word) 复合文件中,已经解决了保存 xls(Excel) 数据的问题了。那么,接下来又要解决另一个问题:当 WORD 程序读取复合文件,遇到了 xls 数据的时候,它该如何启动 Excel 呢?启动后,又如何让 Excel 自己去读入、解析、显示 xls 数据呢?<br /><br />二、CLSID 概念<br /><br /> 

2011-03-03 14:47:00 177

原创 COM 组件设计与应用(一)

<br />COM 组件设计与应用(一)<br />起源及复合文件<br /><br />作者:杨老师<br />一、前言<br /><br />  公元一九九五年某个夜黑风高的晚上,我的一位老师跟我说:“小杨呀,以后写程序就和搭积木一样啦。你赶快学习一些OLE的技术吧......”,当时我心里就寻思 :“开什么玩笑?搭积木方式写程序?再过100年吧......”,但作为一名听话的好学生,我开始在书店里“踅摸”(注1)有关OLE的书籍(注2)。功夫不负有心人,终于买到了我的第一本COM书《OLE2 高级编程

2011-03-03 14:46:00 156

原创 COM:IUnknown、IClassFactory、IDispatch

<br />COM组件有三个最基本的接口类,分别是IUnknown、IClassFactory、IDispatch。 <br />COM规范规定任何组件、任何接口都必须从IUnknown继承,IUnknown包含三个函数,分别是 QueryInterface、AddRef、Release。这三个函数是无比重要的,而且它们的排列顺序也是不可改变的。QueryInterface用于查询组件实现的其它接口,说白了也就是看看这个组件的父类中还有哪些接口类,AddRef用于增加引用计数,Release用于减少引用计数

2011-03-03 12:31:00 462

原创 MFC 程序员的 WTL 教程(一)- ATL 中的 GUI 类

<br />第一部分 - ATL 中的 GUI 类 <br /> <br />下载示例工程 - 24K本章内容README.TXT本系列介绍第一部分介绍ATL 背景知识ATL 和 WTL 的历史ATL 风格的模板ATL 窗口类定义窗口实现填充消息映射高级消息映射链和嵌入(Mix-in)类ATL EXE 的结构ATL 中的对话框就要到 WTL 了,我保证!修订历史README.TXT<br />在继续或者在本文的讨论板块中发布帖子之前,我希望你能先阅读以下内容。 <br />你需要有 Platform SDK

2011-03-02 13:06:00 465

原创 VC 实现 自绘 窗体 标题栏 非客户区

<br />2007年08月23日 星期四 上午 09:35本程序在VC03测试成功,效果, 图片素材:从BC1.bmp到第2页的UR_N.bmp<br />1.准备工作。<br />(1)得到文件夹中的位图句柄:<br />首先要准备相应图片。<br />HBITMAP bitmap;<br />bitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),<br />    "skin//Test.bmp",<br />    IMAGE_BITMAP,<br /

2011-02-25 11:38:00 694

原创 SQLite函数整理

SQLite包含了如下时间/日期函数:datetime().......................产生日期和时间date()...........................产生日期time()...........................产生时间strftime().......................对以上三个函数产生的日期和时间进行格式化datetime()的用法是:datetime(日期/时间,修正符,修正符...)date()和time()的语法与datetime()相同

2010-12-29 10:17:00 1615

原创 TCP连接探测中的Keepalive 和心跳包

<br />采用TCP连接的C/S模式软件,连接的双方在连接空闲状态时,如果任意一方意外崩溃、当机、网线断开或路由器故障,另一方无法得知TCP连接已经失效,除非继续在此连接上发送数据导致错误返回。很多时候,这不是我们需要的。我们希望服务器端和客户端都能及时有效地检测到连接失效,然后优雅地完成一些清理工作并把错误报告给用户。<br />如何及时有效地检测到一方的非正常断开,一直有两种技术可以运用。一种是由TCP协议层实现的Keepalive,另一种是由应用层自己实现的心跳包。<br />TCP默认并不开启Ke

2010-10-14 09:09:00 597

原创 Boost源码剖析之:型别分类器——type_traits

<br />动机<br /><br />1. 分派<br /><br />下面有一个模板函数,假设一个动物收容组织提供了它,他们接受所有无家可归的可怜的小动物,于是他们向外界提供了一个函数接受注册。函数看起来像这样: template //T表示接受的是何种动物void AcceptAnimals(T animal){      ...  //do something};复制代码<br />但是,如果他们想将猫和狗分开处理(毕竟饲养一只猫和饲养一只狗并不相同。他们可能会为狗买一根链子,而温顺的猫则可能不需要

2010-09-07 11:36:00 150

原创 Boost源码剖析之:容器赋值-assign

<br />相信大多数使用STL的人都是为了使用里面的容器,使用vector、list、map的程序员对以下代码可以说是非常熟悉了: vector i_v;i_v.push_back(1);i_v.push_back(2);i_v.push_back(3);i_v.push_back(4);i_v.push_back(5);复制代码<br />挺枯燥,是吧?用boost的assignment库可以让这一过程简洁得多: #include "boost/assign/std/vector.hpp"using n

2010-09-07 11:35:00 251

原创 Boost源码剖析之:泛型指针类any之海纳百川

<br />C++是强类型语言,所有强类型语言对型别的要求都是苛刻的,型别一有不合编译器就会抱怨说不能将某某型别转换为某某型别,当然如果在型别之间提供了转换操作符或是标准所允许的一定程度的隐式转换(如经过非explicit构造函数创建临时变量的隐式转换或是在int,long这些基本型别间的)又另当别论。总的说来,为了保持型别安全,C++有严厉的要求。然而有时候程序员可能有这样的需要: int i;iong j;X x; //假设X为用户定义的类any anyVal=i;... //use anyVal as

2010-09-07 11:35:00 149

原创 Boost源码剖析之:增强的std::pair--Tuple Types

<br />0 动机<br /><br />假设你有这样一个函数:它接受两个整型数据并返回它们整除的结果,像这样: int DevideInts(int n,int d){      return n/d;}复制代码<br />但是我们可能需要更多信息,比如,余数。函数的返回值已被占用,我们可以为函数加一个参数: int DevideInts(int n,int d,int& Remainder) {      Remainer=n%d;       return n/d;}复制代码<br />但是这样的函

2010-09-07 11:33:00 255

原创 Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量

<br />摘要: 多线程同步技术是计算机软件开发的重要技术,本文对多线程的各种同步技术的原理和实现进行了初步探讨。<br /><br />关键词: VC++6.0; 线程同步;临界区;事件;互斥;信号量;<br />正文<br /><br />使线程同步<br /><br />  在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进行。<br /><br

2010-08-24 06:53:00 116

原创 Windows数据类型探幽——千回百转你是谁?(4)

<br />最后这张表是Visual C++ 7.1编译器支持的数据类型,也就是Windows各种数据类型的“根源”了。 数据类型名称字节数别名取值范围int*signed,signed int由操作系统决定,即与操作系统的"字长"有关unsigned int*unsigned由操作系统决定,即与操作系统的"字长"有关__int81char,signed char–128 到 127__int162short,short int,signed short int–32,768 到 32,767__int32

2010-07-28 09:23:00 139

原创 Windows数据类型探幽——千回百转你是谁?(3)

续表POINTER_32void *void *→POINTER_3232位指针(详解略)POINTER_64void *void *→POINTER_6464位指针(详解略)PSHORTshort *short→SHORT,SHORT *→PSHORTSHORT的指针PSTRchar *char→CHAR,CHAR *→PSTR8位Windows字符(ANSI)无终结字符串指针PTBYTEwchar_t *wchar_t→WCHAR,WCHAR *→PTBYTETBYTE的指针PTCHARwchar_t

2010-07-28 09:20:00 237

原创 Windows数据类型探幽——千回百转你是谁?(2)

续表INTint*int→INT32位有符号整数INT_PTRint(_W64 int即__w64 int)*_W64 int→INT_PTR,_W64就是__w64,是为了解决32位与64位编译器的兼容性而设置的关键字用于指针运算INT32signed int*signed int→INT3232位有符号整数INT64signed __int648signed __int64→INT6464位有符号整数LANGIDunsigned short2unsigned short→WORD→LANGID语言标识符

2010-07-28 09:18:00 191

原创 Windows数据类型探幽——千回百转你是谁?(1)

Windows Data TypesWindows数据类型   由微软Windows操作系统所支持的各种数据类型是用来定义函数的返回值、函数和消息的参数以及结构体成员(因为Win32程序是用C语言来编写,所以没有“类”这个概念)的。这些数据类型定义了上述元素的尺码(在内存中的,也就是占用内存的字节数)和含义。笔者以前一直不太注意这些东西,结果在程序设计时可谓步履维艰。不同类型的常/变量,在程序用扮演的角色相去甚远,了解这些类型,对剖析程序的工作原理是非常有用的。今天又是周末,我把这些类型列出来,然后把它们的

2010-07-28 09:15:00 315 1

转载 TinyXML 指南

http://blog.chinaunix.net/u1/42517/showart_454387.html这是什么?本指南就如何有效的使用 TinyXML 提供一些窍门和建议。这里也会包括一些 C++ 的窍门,像如何在字符串和整数之间进行转换。这和 TinyXML 本身并没有任何关系,但是它会对你的工程有所帮助,所以我把它写了进来。如果你不知道 C++ 的基本概念,那么本指南对你没有任何用处。同样,如果你不知道 DOM 是什么,先在别的地方学习一下吧。开始之前一些 XML 数据集/文件将会被用到:exam

2010-06-28 10:56:00 190

转载 2010年SQLite学习笔记之三(转载)

<br />一.如何备份数据库<br />先打开数据库test.db<br />E:/sqlite/tool/sqlite-3_6_22>sqlite3  D:/Test/debug/test.db<br />sqlite> .backup D://Test//debug//test.bak<br />注意:一定要用//双斜杠<br />二.如何恢复数据库<br />先打开数据库test.db<br />E:/sqlite/tool/sqlite-3_6_22>sqlite3  D:/Test/debug/

2010-06-21 11:32:00 433

转载 2010年SQLite学习笔记之二(转载)

<br />一.建立数据库<br />sqlite3.exe test.db<br /> <br /><br />二.双击sqlite-3_6_16目录下的程序sqlite3.exe,即可运行<br />三.退出<br />.exit<br />或者<br />.quit<br /><br />四.SQLite支持如下5种数据类型<br />1.NULL:空值。<br />2.INTEGER:带符号的整型,具体取决有存入数字的范围大小。<br />3.REAL:浮点数字,存储为8-byte IEEE浮点数。

2010-06-21 11:31:00 410

转载 2010年SQLite学习笔记之一(转载)

<br />一.            如何获取SQLite最新版本<br />官方站点:http://www.sqlite.org/<br />从http://www.sqlite.org/网站的Download页面获取<br />即如下页面下载<br />http://www.sqlite.org/download.html<br />二.Windows下的SQLite的源代码是哪个软件压缩包?<br />sqlite-amalgamation-3_6_22.zip是SQLite的windows下源码文

2010-06-21 11:30:00 323

原创 如何写优雅的代码(5)——远离临界区噩梦

<br />//========================================================================<br />//TITLE:<br />//    如何写优雅的代码(5)--远离临界区噩梦<br />//AUTHOR:<br />//    norains<br />//DATE:<br />//    Tuesday 01- December-2009<br />//Environment:<br />//    Windows CE 5.0

2010-06-11 13:12:00 303

转载 CEMAPI实战攻略(三)——操作信箱中的短信息(下)

<br />By 吴春雷<br />QQ:819543772<br />Email:[email protected] <br /><br />6.       解析原始短消息         <br />当成功获取原始信息以后,还不能从中直接获得短信正文等我们想要的内容,要想得到这些内容,还需要对原始信息作一些操作。还记得我们前面提过的短消息的组成结构吗?下面的内容从原始短信中获取每个结构中的内容。<br />a)               获取正文<br />前面提到了Subject和body的关系,

2010-06-02 15:58:00 600

转载 CEMAPI实战攻略(三)——操作信箱中的短信息(上)

<br />by 吴春雷<br />QQ:819543772<br />Email:[email protected]<br />三.操作信箱中的短信息<br />1.       Windows mobile中短消息的组成<br />用过的Windows Mobile平台设备的朋友在第一次发送的短信的时候或多或少都会有些困惑,尤其是使用Windows Mobile 2003以前版本的朋友,发短信的UI上不但有填写目的号码和正文的地方,还有填写主题,CC甚至BCC的位置,搞得用户不知如何是好。为什么会有这些

2010-06-02 15:38:00 377

转载 CEMAPI实战攻略(二)——建立与短信信箱的连接

<br />by 吴春雷<br />QQ:819543772<br />Email:[email protected]<br />二.建立与短信信箱的连接<br />上一部分已经讨论过,如何搭建开发和测试环境,以及如何初始化CEMAPI,再继续这一部分的讨论之前,我们先要澄清几个概念。第一个是会话(Seesion),相信开发网络应用的朋友都不陌生,为了提高通讯效率降低通讯开销,有时候我们需要再目标与本地之间创建一个通道,在通道创建之初,目标与本地先做一些列的响应和请求确认两边的身份,当通道建立以后,目标与本

2010-06-01 11:12:00 262

转载 CEMAPI实战攻略(一)——准备工作

<br />By 吴春雷<br />QQ:819543772<br />EMAIL:[email protected]<br /> <br />一.准备工作<br />1.       开发环境和设备平台<br />a)         下载和安装<br />微软已经发布了Windows Mobile 6.0 SDK和中文版的仿真器已,WM6.0的SDK和仿真器分成了标准版和专业版两个版本,由于两个版本都可以支持cemapi.lib,因此我们可以选用其中任意一个版本作为我们的开发平台。本文选择了WM6.0

2010-05-31 17:07:00 248

原创 完成端口的例子。

>这本书.网上讨论完成端口资料很多,大宝收集的最多,有些是错误的,有些说的比较模糊.我就进可能清晰说明一下完成端口在游戏开发中一般模型.并解决几个难点问题.由于完成端口是多线模型(当然可以把工作线程设定为一个)所以设计到资源的时候要线程安全,所以我开始简单封装了一下几个stl的容器./***************************************以下代码要与后边的代码一起编译*

2009-06-15 16:41:00 1078 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除