C++ Builder初级调试技术
有很多是可以用调试来看到问题所在.只是初学者不知道有这些东东,即使知道也不是如何去用.
我曾经也是这样.从第一本入门书 BUG 一直困扰自己, 常常用ShowMessage("xxxx");来观察程序运行现象.
因为本人只学过TC 在TC中代码写的不很长,程序流程自己很清楚,也就没去使用TC的调试器,好象它没有集成
的调试器. 在BCB下,程序流程 ...
C/C++误区五:检查 new 的返回值
首先澄清一下,这个误区仅对 C++ 成立,这里不过是沿用“C/C++ 误区”这个衔头罢了。
我们都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。但是,如果你简单地把这一招应用到 new 上,那可就不一定 ...
波形捕捉:(5)“捕捉缓冲区”信息
你可以使用IDirectSoundCaptureBuffer8::GetCaps方法获取"捕捉缓冲 区"的大小。在使用 DSCBCAPS 结构体做为参数传递前,确保已经对该结构 体的 dwSize 成员进行了初始化。
想要获取缓冲区创建时的格式信息,可以调用 IDirectSoundCaptureBuffer8::GetFormat方法。该方法以一个WAVEFORMATEX结 构体的形式返回格式信息。
注意 ...
C++学习摘要之六:友元函数与友元类
采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为 公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但 又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有 友元类,两者统称为友元。 ...
C++学习摘要之三:继承和派生
继承性是面向对象程序设计最重要的机制之一。
1.继承的概念
所谓继承 (inheritance)就是利用已有的数据类型定义出新的数据类型。
在继承关系中,被继承的类称为 基类(base class)或父类,而通过继承关系定义出来的新类则被称为派生类(derived class)或子类 。
派生类既可以对基类的性质进行扩展又可以对基类进行限制 ...
C++实现爆炸后的振动效果
在许多游戏软件中,我们经常能看到这样的场面:当某一设施爆炸后,屏幕画面会伴随着轻微的振动,使人感到身临其境。笔者编写了一个函数void MoveView(int x,int y);通过CRT控制器将屏幕视角左上角坐标移至 (x,y)处,使画面相对移动,从而产生振动效果。程序由Borland C++ 2.0编写,采用VGA 12H模式,代码小、速度快、运行 ...
基于流模式长连接的简单实现
基于流模式的长连接我们可以做很多事情,比方说在局域网内,我们建立这种模式,可以时时传输数据,而不用每次传输数据是创建socket,传输完后,关闭socket。可以减少创建销毁socket的时间。
基于流模式的下,数据一直在发送,我们需要知道,每次发送数据量,所以常见的方式时,我们在发送数据时,指定此次发送数据的长度, ...
C/C++ 误区一:void main()
很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的 。C/C++ 中从来没有定义过void main( ) .C++ 之父 Bjarne Stroustrup 在 他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* …… */ } is not and never has been C++, nor has it even been C.( void main( ) 从来就不存在于 ...
用C++ Builder设计实现文件切割机
一、程序设计原理
我们知道文件之所以能够被分割是因为所有文件都是以二进制的形式存储的,然后再根据文件系统的相应规定来进行读取处理。我们基于这个原理,把所有类型的文件都以二进制进行读写,合并时再以二进制的格式把分割后的文件重新重新组合起来,这样就实现了对文件的分割与合并。
二、程序设计过程及祥解
1.我们 ...
Linux系统下QT中的多线程编程
Qt 作为一种基于 C++ 的跨平台 GUI 系统,能够提供给用户构造图形用户界面的强大功能。为了满足 用户构造复杂图形界面系统的需求,Qt 提供了丰富的多线程编程支持。
Qt 作为一种基于 C++ 的跨平台 GUI 系统,能够提供给用户构造图形用户界面的强大功能。为了满足 用户构造复杂图形界面系统的需求,Qt 提供了丰富的多线程编 ...
C++内存越界问题及解决方法
与内存泄露相比,C++最令人头痛的问题是内存越界,而内存越界很多情况下是由于悬挂指针引起的。
假设一个指针变量:
Object * ptr;
使用ptr时,我们除了要判断ptr是否为0以外,还要怀疑它指向的对象是否有效,是不是已经在别的地方被销毁了。我们希望当它指向的对象被销毁时,ptr被自动置为0。
显然,C++没有这种机制,但是 ...
如何把一个网页存为一个单独的mht文件
#include "SHDocVw_OCX.h"
#include "cdoex.h"
#include "msado15.h"
using namespace CDO;
// 本文是ccrun(老妖)根据相关资料改的,在BCB 6.0 下成功编译并测试通过.
// 如果有不能正常运行的,可能需要在机器上安装有outlook.
void __fastcall SaveWholePage(BSTR bstrUrl, BSTR bstrFileName)
{
CoInitialize(NULL);
...
波形捕捉:(4)创建一个“捕捉缓冲区”
调用 IDirectSoundCapture8::CreateCaptureBuffer 方法创建一个捕捉缓冲 区。
该方法的其中一个参数是一个 DSCBUFFERDESC 结构体,该结构体描述了你想 得到的缓冲区的特性。该结构体的最后一个成员是一个 WAVEFORMATEX 结构体。 这个结构体必须用具体的WAV格式来初始化。
注意:如果你的应用程序在播放声音的同时捕捉这些声 ...
BCB提供的文件操作的库函数
在BCB中也提供了文件操作的函数,这些函数的功能和前面所介绍的大致相同,但这类函数和BCB关系紧密,能使用BCB中的AnsiString等数据类型,在BCB中用这种方式的文件操作是最方便的,下面我就把这种文件操作详细介绍。
在BCB提供的这组文件操作函数中,可分为三种类型,就是:1、文件名函数,2、文件管理函数;3、文件I/O函数 ...
波形捕捉:(8)使用“捕捉缓冲区”
捕捉一个声音包括以下步骤:
1.通过调用IDirectSoundCaptureBuffer8::Start方法启动缓冲区。正规来说 ,你应该设置DSCBSTART_LOOPING 作为dwFlags参数,这样这个缓冲区将持续运 行而不是当到达缓冲区末尾后就停止。从输入设备上获取的音频数据从缓冲区起 始处开始填充。
2.等待直到达到期望的数据量。一个决定什么时候捕捉 ...
PE文件格式分析心得
PE文件格式最近好像炒得沸沸扬扬,由于我正在做一个这样的程序,索性将自己的心得写出来与大家同享。
PE文件头分两大部分:
1:DOS ‘MZ’ HEADER
2:IMAGE_NT_HEADERS
其中IMAGE_NT_HEADERS中包含
PE signature
IMAGE_FILE_HEADER
IMAGE_OPTIONAL_HEADER(其中包含Data Direcotry)
文件头后紧跟着为
Section Table (array ...
文件关联型木马的编程思路
我们知道一般情况下想在开机启动程序,就要把程序写在注册表中的
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunService
等环境中,由于这个值大家都比较熟悉所以 ...
C++中string和string.h的作用和区别
#include
void main()
{
string aaa = " abcsd d " ;
printf( " looking for abc from abcdecd %s\n " ,
(strcmp(aaa, " abc " )) ? " Found " : " Not Found " );
}
不能正确执行,提示说是string 类型没有定义
而下面:
#include
using namespace std;
void main()
{
string aaa = " abcsd d " ;
printf( " looking for ...
从系统中取得指定资源图像
在Winuser.h中定义了一些系统常用的资源,比如对话框的图标,某些按钮上的图像等。
以下是部分OEM资源序号和一些标准ICON的ID:
//---------------------------------------------------------------------------
// OEM Resource Ordinal Numbers
#define OBM_OLD_CLOSE 32767
#define OBM_SIZE 32766
#d ...
选择目录的两种方法
在我们的应用程序中经常需让用户选择目录,如杀毒软件中用户选择处理目录等。这就涉及目录的选择,我们可使用如下方法之一让用户选择目录:
1、使用SHBrowseForFolder和SHGetPathFromIDList函数
函数原形申明如下:
WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder(LPBROWSEINFO lpbi);
WINSHELLAPI BOOL WINAPI SHGetP ...