小李子

小小的蜗牛,慢慢的爬。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 14 下一页

2012年3月19日

摘要: 1. 窗口过程 每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ID),和两个消息参数(wParam, lParam), 当窗口收到消息时系统就会调用此窗口过程来处理消息。(所以叫回调函数)2 消息类型1) 系统定义消息(System-Defined Messages)在SDK中事先定义好的消息,非用户定义的,其范围在[0x0000, 0x03ff]之间, 可以分为以下三类:1> 窗口消息(Windows Message)与窗口的内部运作有关,如创建窗口,绘制窗口,销毁窗口等。可以是一般的 阅读全文

posted @ 2012-03-19 16:51 ljl_falcon 阅读(376) 评论(1) 推荐(0)

摘要: windows似乎只提供了一种启动进程的方法:即必须从一个可执行文件中加载并启动。 而下面这段代码就是提供一种可以直接从内存中启动一个exe的变通办法。 用途嘛, 也许可以用来保护你的exe,你可以对要保护的 exe 进行任意切分、加密、存储, 只要运行时能将exe的内容正确拼接到一块内存中,就可以直接从内存中启动,而不必不安全地去 生成一个临时文件再从临时文件启动进程。另外这段代码也提供了一种自己写exe外壳的简单途径, 如果能配合其它各种外壳技术就更好地保护你的exe文件。 原理很简单:就是“借尸还魂”,启动一个僵尸进程(NT下可以是自身程序启动的另一个进程), 然后在它运行前将其整个替换 阅读全文

posted @ 2012-03-19 13:30 ljl_falcon 阅读(377) 评论(0) 推荐(0)

摘要: 用百分比比较两个字符串(彼此之间有多少相似度)返回 byte类型,从0到 100%functionCompareStringsInPercent(Str1,Str2:string):Byte;typeTLink=array[0..1]ofByte;vartmpPattern:TLink;PatternA,PatternB:arrayofTLink;IndexA,IndexB,LengthStr:Integer;beginResult:=100;//BuildingpatterntablesLengthStr:=Max(Length(Str1),Length(Str2));forIndexA:= 阅读全文

posted @ 2012-03-19 13:29 ljl_falcon 阅读(963) 评论(0) 推荐(0)

摘要: usesWindows,SysUtils,Classes;const//Crc32表Table:Array[0..255]ofDWORD=($00000000,$77073096,$EE0E612C,$990951BA,$076DC419,$706AF48F,$E963A535,$9E6495A3,$0EDB8832,$79DCB8A4,$E0D5E91E,$97D2D988,$09B64C2B,$7EB17CBD,$E7B82D07,$90BF1D91,$1DB71064,$6AB020F2,$F3B97148,$84BE41DE,$1ADAD47D,$6DDDE4EB,$F4D4B551, 阅读全文

posted @ 2012-03-19 13:26 ljl_falcon 阅读(399) 评论(0) 推荐(0)

摘要: 用硬件id加密程序,其中一项加密是用mac地址。mac如果是真实网卡信息是唯一的,不好的消息是网卡很容易就能虚拟,所以需要配合其它手段。现在有三种方式,各有利弊第一种 最简单也最实用,通过调用ipconfig -all 来取得网卡。第二种 通过netbios,因为是网络协议,如果网卡没有连接上,取不到mac地址第三种 通过rpc调用,只能得到一块网卡.在有多块网卡时会出现有时取到的MAC不一致.第一种function MacAddress(): string;implementationfunction GetIpMacAddress(): TStringList;var files,re:T 阅读全文

posted @ 2012-03-19 13:14 ljl_falcon 阅读(765) 评论(0) 推荐(0)

2012年3月9日

摘要: 三、高效的批量数据插入: 在给出操作步骤之前先简单说明一下批量插入的概念,以帮助大家阅读其后的示例代码。事实上,批量插入并不是什么新的概念,在其它关系型数据库的C接口API中都提供了一定的支持,只是接口的实现方式不同而已。纵观众多流行的数据库接口,如OCI(Oracle API)、MySQL API和PostgreSQL API等,OCI提供的编程接口最为方便,实现方式也最为高效。SQLite作为一种简单灵活的嵌入式数据库也同样提供了该功能,但是实现方式并不像其他数据库那样方便明显,它只是通过一种隐含的技巧来达到批量插入的目的,其逻辑如下: 1). 开始一个事物,以保证后面的数据操作语句均在该 阅读全文

posted @ 2012-03-09 11:15 ljl_falcon 阅读(268) 评论(0) 推荐(0)

摘要: 一、获取表的Schema信息: 1). 动态创建表。 2). 根据sqlite3提供的API,获取表字段的信息,如字段数量以及每个字段的类型。 3). 删除该表。 见以下代码及关键性注释: 1 #include <sqlite3.h> 2 #include <string> 3 4 using namespace std; 5 6 void doTest() 7 { 8 sqlite3* conn = NULL; 9 //1. 打开数据库10 int result = sqlite3_open("D:/mytest.db",&conn);11 阅读全文

posted @ 2012-03-09 11:14 ljl_falcon 阅读(270) 评论(0) 推荐(0)

摘要: 一、概述: 在SQLite中,锁和并发控制机制都是由pager_module模块负责处理的,如ACID(Atomic, Consistent, Isolated, and Durable)。在含有数据修改的事务中,该模块将确保或者所有的数据修改全部提交,或者全部回滚。与此同时,该模块还提供了一些磁盘文件的内存Cache功能。 事实上,pager_module模块并不关心数据库存储的细节,如B-Tree、编码方式、索引等,它只是将其视为由统一大小(通常为1024字节)的数据块构成的单一文件,其中每个块被称为一个页(page)。在该模块中页的起始编号为1,即第一个页的索引值是1,其后的页编号以此类 阅读全文

posted @ 2012-03-09 11:12 ljl_falcon 阅读(219) 评论(0) 推荐(0)

摘要: 一、简介: 尽管SQLite的数据库是由单一文件构成,然而事实上在SQLite运行时却存在着一些隐含的临时文件,这些临时文件是出于不同的目的而存在的,对于开发者而言,它们是透明的,因此在开发的过程中我们并不需要关注它们的存在。尽管如此,如果能对这些临时文件的产生机制和应用场景有着很好的理解,那么对我们今后应用程序的优化和维护都是极有帮助的。在SQLite中主要产生以下七种临时文件,如: 1). 回滚日志。 2). 主数据库日志。 3). SQL语句日志。 4). 临时数据库文件。 5). 视图和子查询的临时持久化文件。 6). 临时索引文件。 7). VACUUM命令使用的临时数据库文件。 二 阅读全文

posted @ 2012-03-09 11:09 ljl_falcon 阅读(310) 评论(0) 推荐(0)

摘要: 一、内存数据库: 在SQLite中,数据库通常是存储在磁盘文件中的。然而在有些情况下,我们可以让数据库始终驻留在内存中。最常用的一种方式是在调用sqlite3_open()的时候,数据库文件名参数传递":memory:",如:rc = sqlite3_open(":memory:", &db); 在调用完以上函数后,不会有任何磁盘文件被生成,取而代之的是,一个新的数据库在纯内存中被成功创建了。由于没有持久化,该数据库在当前数据库连接被关闭后就会立刻消失。需要注意的是,尽管多个数据库连接都可以通过上面的方法创建内存数据库,然而它们却是不同的数据库, 阅读全文

posted @ 2012-03-09 10:52 ljl_falcon 阅读(363) 评论(0) 推荐(0)

上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 14 下一页