使用CommaText
有时需要一个方便的方法存放一个StringList,它只有简单的一行。例如,当你想使用一个INI文件,如何向一个INI文件中写入一行呢,使用CommaText 就能完成这个工作。
这里有个例子,功能是创建一个blah.ini文件,并写入一个如下形式的值:
[My Section]
Memo1=(你在Memo1中输入的文字)
1.在Form1上有两个按钮btnLoad and btnSa ...
软件试用次数的限制
软件试用次数的限制有很多种方法,其关键是把次数这个值存储在哪里。本文介绍一种方法,通过改变文件的时间来存储试用次数,从而限制软件的试用。
一、通过改变文件时间来限制软件的试用次数
在MS-DOS中,文件的时间是 通过一个16位的值来保存的,位 15~11用来保存小时数,位10~5用 来保存分钟数,位4~0用来保存秒钟数。这 ...
《深度探索C++对象模型》读书笔记(7)
***Template的“具现”行为***
template class中的任何member都只能通过template class的某个实体来存取或操作。
Point::Status s; // ok
Point::Status s; // error
如果我们定义一个指针,指向特定的实体,像这样:
Point *ptr = 0;
由于这是一个指向class object的指针,本身并不是一个class object,编译器不需要知 ...
Vdsp(bf561)中的浮点运算(3):FLT_MIN
FLT_MIN是在float.h中定义的一个常量,用以表示单精度浮点数的最小值。
#define FLT_MIN 1.1754943508222875E-38F
那么这个值从何而来?
从浮点数的表示可以知道,尾数必然是大于等于1的,要取最小值,只能将指数设置为最小值,由于浮点数规定将指数为0的情况表示特殊的浮点数,因此指数只能取1,即
0 00000001 ...
《深度探索C++对象模型》读书笔记(3)
在visual C++ 6.0中测试如下代码:
#include "iostream"
using namespace std;
class X {};
class Y : public virtual X {};
class Z : public virtual X {};
class A : public Y,public Z {};
int main()
{
cout
得出的结果也许会令你毫无头绪
sizeof(X): 1
sizeof (Y): 4
sizeof(Z): 4
sizeof(A): 8
下面一一阐释 ...
自解密的加密程序的制作
为了保证自己的数据不被别人非法地窃取,有必要对数据文件进行适当地加密。本程序采取一定的算法,对密码和数据进行加密,生成一个自解密的EXE文件。这个自解密文件是由两部分组成的。第一部分为可执行代码部分,其作用是对密码进行判断,对数据进行解密;后一部分是被加过密的密码和数据。
本程序分两个模块进行编写。第一 ...
关于程序撰写风格
曾听人说过这么一句话,通过一个程序员的编程风格,可以看出这个程序员有没有大量阅读和撰写程序的经验。虽不能这样一概而论,但多少可以看出编程风格的重要性。我这里说的编程风格,没有包括具体的编程思想等等,仅指的是撰写风格,也就是视觉上的风格。
也许有人会不太明白或者不肖一顾,写程序就写程序嘛,写出来的程序 ...
xp下用户程序空间分配(5):加载系统DLL
ntdll.dll是加载的第一个系统DLL,它的模块信息:
对应的内存块:
和exe略微有所区别,还是用dumpbin把它的文件内容导出来进行比较。
1.1 文件头
DLL和EXE文 件一样都是PE格式,因此它们的文件头的结构是一样的,看看从ntdll.dll中dump出来的信息:
14C machine (x86)
4 number of sections
4802BDC5 time date stamp Mon ...
C++Builer中多线程的实现
还在Dos时代,人们就在寻求一种多任务的实现。于是出现了TSR类型的后台驻留程序,比较有代表性的有Side Kick、Vsafe等优秀的TSR程序,这类程序的出现和应用确实给用户使用计算机带来了极大的方便,比如Side Kick,我们编程可以在不用进编辑程序的状态下,一边编辑源程序,一边编译运行,非常方便。但是,Dos单任务操作系统 ...
xp下用户程序空间分配(4):加载主程序
这个是主程序,它的模块信息:
对应的内存块:
这些块的类型都是MEM_IMAGE,且分配时的保护标志都是PAGE_EXECUTE_WRITECOPY,MSDN这样解释这 个标志位:
Enables execute, read, and write access to the committed region of image file code pages. The pages are shared read-on-write and copy-on-write.
这几个内存 ...
C++ Builder IDE使用技巧
不管您已经用了多久的C++Builder,无庸置疑,IDE中总有些被您忽略的功能。本文中介绍了IDE中的一些鲜为人知的功能。
快速选择Form
在您开发应用程序时,您经常需要选中Form来改变Form的属性值或生成新的Form事件句柄。有些时候,选择页面只需简单在页面上单击。但更多的时候,页面总是完全被其上的组件所隐藏。
通过对象观 ...
xp下用户程序空间分配(2):栈
每个线程都有自己的栈空间,这个空间大小是在CreateThread时指定的,而主线程的栈则是由xp在创 建进程时指定的,在vs2008下设置一个断点,中断程序的执行,可以看到主线程ESP的值为0x00124914, 这个指针落在下面这个区域:
这块空间的上限是0x0013 0000,这个值与我们读出来的NT_TIB结构体里面的StackBase的值是一致的 , ...
如何在C++ Builder中检测硬件
在我们编写的程序中常常要和硬件打交道,那么如何在程序中确定系统中是否有该 设备,它的运行状态又是怎样的呢?对于初学者来说,这个问题常常不好解决,其实只需 简单地利用几个API函数,硬件的问题并不神秘。下面就让我们一起看看在C++ Build er中是如何检测硬件的。
1. 检测CPU的型号
先让我们从最简单的做起,看一看自己 ...
利用堆栈来ping计算机
以下的这个类是解决一个很普通的问题的:在一台WIN95的计算机上怎么样利用MSTCP堆栈去PING另外一台计算机。当然,这个类在NT3.51和NT4上也可以用。显然,MicroSoft公司不会那么笨,在WIN系统中又另外构造这么一个单独的机制来解决这个问题,让本来就复杂的WIN系统更加复杂。那么,我们只能用ICMP DLL自己来解决这个问题了。 ...
xp下用户程序空间分配(8):MEM_MAPPED
在去除前面的那些东西之后,我们的内存块里面还有一堆MEM_MAPPED的内容,就像这样的块:
MSDN里面这样解释MEM_MAPPED这种类型:
Indicates that the memory pages within the region are mapped into the view of a section.
很自然地我们想用GetMappedFileName来看看映射到这些 内存区域的文件名,于是发现了下面几个块的 ...
深入浅出之正则表达式
前言:
半年前我对正则表达式产生了兴趣,在网上查找过不少资料,看过不少的教程,最后在使用一个正则表达式工具RegexBuddy时发现他的教程写的非常好,可以说是我目前见过最好的正则表达式教 程。于是一直想把他翻译过来。这个愿望直到这个五一长假才得以实现,结果就有了这篇文章。关于本 文的名字,使用“深入浅出”似乎 ...
如何在Win9x/2k下建立共享目录
在Windows中建立一个共享目录,通常是使用NetShareAdd函数.但是在Win2k和Win9x下,这个函数分别是包含在Netapi32.dll和Svrapi.dll中.
那么如果直接在程序中使用Netapi32.lib或Svrapi.lib,在不同的操作系统下运行时会发生找不到xxx函数的输出错误. 解决的办法就是通过GetProcAddress动态获取NetShareAdd.正好ccrun在csdn回答一 ...
将文件或目录删除到回改站
TSHFileOpStruct OpStruct;
char DelFile[128];
setmem(DelFile,128,'\0');
StrPCopy(DelFile,"C:\\temp");
OpStruct.hwnd=Handle;
OpStruct.wFunc=FO_DELETE;
OpStruct.pFrom=DelFile;
OpStruct.pTo=NULL;
OpStruct.fFlags=FOF_ALLOWUNDO;
OpStruct.hNameMappings=NULL;
OpStruct.lpszProgressTitle=NULL;
SHFileOperation ...
Unicode宽字节字符集
1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数?
可以调用Microsoft Visual C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。
调用strlen函数,无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。
2. 如何对DBCS(双字节字符集)字符串进行 ...
读磁片磁区
以前的dos版要读、写、格式化第0轨的第1个磁区,程式大致如下:
char buffer[512];
reg.x.dx=0 ; /* for drive a *
reg.x.cx=0x0001 /* for boot sector */
reg.x.bx=fp_off(buffer);
sreg.es=fp_seg(buffer);
resg.x.ax=0x0201; /* 02 for read, 03 for write ,05 for format */
int86x(0x13,®,®,&sreg);
那麽 ...