
Visual C++
文章平均质量分 74
johnny_83
占略
展开
-
线程同步---Visual C++
虽然多线程能给我们带来好处,但是也有不少问题需要解决。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成的,具有一定的不确定性,因此就有可能出现两个线程同时对磁盘驱动器进行操作,从而出现操作错误;又例如,对于银行系统的计算机来说,可能使用一个线程来更新其用户数据库,而用另外一个线程来读取数据库以响应储户的需要,极有可能读数据库的线程读取的是原创 2007-07-22 08:46:00 · 846 阅读 · 0 评论 -
远程线程嵌入方式 实现DLL的隐藏
#include "stdafx.h"#include#include#include#include "psapi.h"//#include "PSAPI.H"//#pragma comment( lib, "PSAPI.LIB" ) DWORD ProcessToPID( char原创 2007-08-04 09:09:00 · 714 阅读 · 0 评论 -
用VC进行COM编程所必须掌握的理论知识
一、为什么要用COM 软件工程发展到今天,从一开始的结构化编程,到面向对象编程,再到现在的COM编程,目标只有一个,就是希望软件能象积方块一样是累起来的,是组装起来的,而不是一点点编出来的。结构化编程是函数块的形式,通过把一个软件划分成许多模块,每个模块完成各自不同的功能,尽量做到高内聚低藕合,这已经是一个很好的开始,我们可以把不同的模块分给不同的人去做,然后合到一块,这已经有了组装的概念了原创 2007-08-07 07:42:00 · 683 阅读 · 0 评论 -
检查本机的CPU数量信息。
// test.cpp : 检查本机的CPU数量信息。//#include "stdafx.h"#includewindows.h>#includeint APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCm原创 2007-08-10 18:34:00 · 1189 阅读 · 0 评论 -
判断硬盘驱动器类型
// test.cpp : 判断硬盘驱动器类型//#include "stdafx.h"int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){LPCTSTR aa;switch(GetDr原创 2007-08-10 18:35:00 · 1045 阅读 · 0 评论 -
VC中的消息机制(二)
队列消息和非队列消息 从消息的发送途径来看,消息可以分成2种:队列消息和非队列消息。消息队列由可以分成系统消息队列和线程消息队列。系统消息队列由Windows维护,线程消息队列则由每个GUI线程自己进行维护,为避免给non-GUI现成创建消息队列,所有线程产生时并没有消息队列,仅当线程第一次调用GDI函数数系统给线程创建一个消息队列。队列消息送到系统消息队列,然后到线程消息队列;非队列消息直接原创 2007-08-10 10:01:00 · 734 阅读 · 0 评论 -
ASCII,Unicode, BSTR,LPSTR和LPWSTR转换...
一、BSTR、LPSTR和LPWSTR 在Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。之所以出现类似上述的这些数据类型,是因为不同编程语言之间的数据交换以及对ANSI、Unicode和多字节字符集(MBCS)的支持。 那么什么是BSTR、LPSTR以及LPWSTR呢? BSTR(Basic STRi原创 2007-08-22 11:49:00 · 1869 阅读 · 0 评论 -
C++常用数据类型及其操作详解
一. VC常用数据类型列表二. 常用数据类型转化2.1数学类型变量与字符串相互转换2.2 CString及string,char *与其他数据类型的转换和操作●CString,string,char*的综合比较●数学类型与CString相互转化●CString与char*相互转换举例●CString 与 BSTR 型转原创 2007-08-22 11:51:00 · 2589 阅读 · 1 评论 -
C++字符串完全指引之一 —— Win32 字符编码
引言 毫无疑问,我们都看到过像 TCHAR, std::string, BSTR 等各种各样的字符串类型,还有那些以 _tcs 开头的奇怪的宏。你也许正在盯着显示器发愁。本指引将总结引进各种字符类型的目的,展示一些简单的用法,并告诉您在必要时,如何实现各种字符串类型之间的转换。 在第一部分,我们将介绍3种字符编码类型。了解各种编码模式的工作方式是很重要的事情。即使你已经知道一个字符串是一个字原创 2007-08-22 12:59:00 · 912 阅读 · 0 评论 -
ASSERT和VERIFY的区别
1 ASSERT与VERIFY宏在Debug模式下作用基本一致,二者都对表达式的值进行计算,如果值为非0,则什么事也不做;如果值为0,则输出诊断信息。2 ASSERT与VERIFY宏在Release模式下效果完全不一样。ASSERT不计算表达式的值,也不会输出诊断信息;VERIFY计算表达式的值,但不管值为0还是非0都不会输出诊断信息。VERIFY 与ASSERT用在程序调试上并无本质上的区原创 2007-08-22 13:01:00 · 1655 阅读 · 0 评论 -
C++字符串完全指引之三 —— 字符串封装类续
MFC类CString 因为一个MFC CString类的对象包含TCHAR类型的字符,所以确切的字符类型取决于你所定义的预处理符号。大体来说,CString 很像STL string,这意味着你必须把它当成不透明的对象,只能使用CString提供的方法来修改CString对象。CString有一个string所不具备的优点:CString具有接收MBCS和Unicode两种字符串的构造函数,它原创 2007-08-22 13:05:00 · 912 阅读 · 0 评论 -
如何在VC中使用ADO开发数据库应用程序
一、ADO概述ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE.DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口原创 2007-08-22 14:14:00 · 889 阅读 · 0 评论 -
VC下ADO开发实践
一、ADO简介ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,请不必为此担心,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用,并不失灵活性。本文将详细地介绍在VC下如何使用ADO来进行数据库应用程序开发,并给出示例原创 2007-08-22 14:15:00 · 1267 阅读 · 0 评论 -
C++字符串完全指引之二 —— 字符串封装类
引言 因为C语言风格的字符串容易出错且不易管理,黑客们甚至利用可能存在的缓冲区溢出bug把C语言风格的字符串作为攻击目标,所以出现了很多字符串封装类。不幸的是,在某些场合下我们不知道该使用哪个字符串类,也不知道怎样把一个C风格的字符串转换成一个字符串封装类。 这篇文章将介绍所有在Win32 API, MFC, STL, WTL 和 Visual C++ 运行库中出现的字符串类型。我将描述每一个原创 2007-08-22 13:09:00 · 881 阅读 · 0 评论 -
用visual c++实现远程线程嵌入技术
远程线程技术指的是通过在另一个进程中创建远程线程的方法进入那个进程的内存地址空间。我们知道,在进程中,可以通过createthread函数创建线程,被创建的新线程与主线程(就是进程启动时被同时自动建立的那个线程)共享地址空间以及其他的资源。 但是很少有人知道,通过createremotethread也同样可以在另一个进程内创建新线程,被创建的远程线程同样可以共享远程进程(是远程进程耶!)的地址原创 2007-08-04 09:01:00 · 718 阅读 · 0 评论 -
基于UDP的网络通讯程序
我们知道TCP/IP协议是至今发展最为成功的协议之一,也是整个互联网的基础。它在传输层有两个不同的协议:TCP和UDP,用途都很广泛,下面我就UDP做一个示例程序。整个例子有两个程序组成,一个发送数据,另一个程序接收数据后,完成绘图工作。 本文程序运行效果图如下:一、发送程序 首先建立数据发送程序(Fason)。一共发送四个数据:圆心的X坐标、圆心的Y坐标、圆半径R、圆的颜色。它的实现主要如原创 2007-07-28 07:18:00 · 899 阅读 · 0 评论 -
用vc编写具有动态换肤功能的应用程序
引言 如果能在自己的程序中也具备动态更换皮肤的能力,将使软件平添几分亮点从而更易博得用户的青睐。 具笔者了解,当前介绍这种技术的文章资料较少,与其流行程度很不协调,而且现有的少量资料也多是针对对话框进行的,无非是在对话框上覆盖一层图片,并通过更换图片来实现程序的动态换肤。虽然这也是动态换肤的一种,但由于技术过于简单,本文将着重介绍另外一种动态换肤技术--工具栏的动态换肤技术,这也是ie浏览器等原创 2007-07-22 10:39:00 · 726 阅读 · 0 评论 -
VC++屏幕抓词的技术实现
屏幕上的文字大都是由gdi32.dll的以下几个函数显示的:TextOutA、TextOutW、ExtTextOutA、 ExtTextOutW。实现屏幕抓词的关键就是截获对这些函数的调用,得到程序发给它们的参数。 我的方法有以下三个步骤: 一、得到鼠标的当前位置 通过SetWindowsHookEx实现。 二、向鼠标下的窗口发重画消息,让它调用系统函数重画 通过WindowF原创 2007-07-22 10:41:00 · 1456 阅读 · 0 评论 -
在VC中实现程序在启动时隐藏
最近经常见论坛上有人问,程序在启动时如何隐藏。以下是我总结的一些方法,欢迎大家讨论,找出更好的方法。 对于这类问题,大家最容易想到的可能就是在PreCreateWindow中添加cs.style &=~WS_VISIBLE;这是不可行的。程序仍可使用ShowWindow()将窗体显示出来.1.基于对话框的程序 我在论坛上看到有人说在OnInitDialog()中加上ShowWindow(原创 2007-07-22 10:43:00 · 589 阅读 · 0 评论 -
用VC++编写勾子程序
什么是勾子 在Windows系统中,勾子(hook)是一种特殊的消息处理机制。勾子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的勾子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。可见,利用勾子可以实现许多特殊而有用的功能。因此,对于高级编程人员来说,掌握勾子的编程方法是很有必要的。原创 2007-07-22 08:55:00 · 1175 阅读 · 0 评论 -
用VC++编程控制计算机和光驱
SWM 通常有些程序在初次使用使用时,要进行一些象安装特定字体的设置,之后需要重新启动计算机使之生效;而在一些多媒体软件编程中会用到用程序操纵CD_ROM的开与关的情况。为了说明在VC中实现这两项功能的方法,我们创建一个基于对话框、名为Control的工程。对话框的外观如图1所示,其中四个按钮(Button)属性设置见下表, ID Caption IDC_SHUTDOWNCOMPUTER原创 2007-07-22 09:03:00 · 722 阅读 · 0 评论 -
VC++中非法探取密码的原理及其防范
引言 在Windows下输入密码时,为了安全起见通常都以星号来屏蔽用户输入的密码。如果需要在自己编写的应用程序中需要用户输入密码,通常的选择就是选用Edit控件并设置其Password属性。虽然Edit控件的Password属性在一定程度上可以保护用户的密码不被视觉偷窥,但在许多窥探密码的黑客软件面前却不起任何作用,密码将赫然暴露于攻击者面前。显然仅仅依靠Edit控件本身的Password功能原创 2007-07-22 10:37:00 · 656 阅读 · 0 评论 -
Visual C++ MFC 中常用宏的含义介绍
AND_CATCHAND_CATCH AND_CATCH(exception_class,exception _object_point_name) 说明: 这个宏定义一个代码块,它用于获取废除当前TRY块中的附加异常类型。使用CATCH宏以获得一个异常类型,然后使用AND_CATCH宏获得随后的异常处理代码可以访问异常对象(若合适的话)已得到关于异常的特别原因的更多消息。在AND_原创 2007-07-22 10:42:00 · 610 阅读 · 0 评论 -
对话框隐藏的几种方法
有很多应用程序要求一起动就隐藏起来,这些程序多作为后台程序运行,希望不影响其他窗口,往往只在托盘区显示一个图标。这些程序通常都是对话框程序,而对话框在初始化的过程上与SDI、MDI的初始化是不同的,对话框只需要DoModule或者是CreateDialog等等对话框函数调用一次便可,SDI、MDI则要好几步才行。这样看来,对话框在使用方法上面是隐藏了不少细节的,其中就没有SDI、MDI所要求的Sh原创 2007-07-22 21:07:00 · 2101 阅读 · 0 评论 -
CFile操作详解
各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的。本文将对Visual C++中有关文件操作进行全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行详细的分析。 1.文件的查找 当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门原创 2007-07-22 08:58:00 · 776 阅读 · 0 评论 -
深入vc++消息映射与命令通知
消息映射 消息的传递与发送是windows应用程序的核心所在,任何事件的触发与响应均要通过消息的作用才能得以完成。在sdk编程中,对消息的获取与分发主要是通过消息循环来完成的,而在mfc编程中则是通过采取消息映射的方式对其进行处理的。相比而言,这样的处理方式要简单许多,这也是符合面向对象编程中尽可能隐含实现细节的原则。 一个完整的mfc消息映射包括对消息处理函数的原型声明、实现以及存在于消原创 2007-07-22 08:38:00 · 794 阅读 · 0 评论 -
浅谈HOOK技术在VC编程中的应用
Windows操作系统是建立在事件驱动机制之上的,系统各部分之间的沟通也都是通过消息的相互传递而实现的。但在通常情况下,应用程序只能处理来自进程内部的消息或是从其他进程发过来的消息,如果需要对在进程外传递的消息进行拦截处理就必须采取一种被称为HOOK(钩子)的技术。钩子是Windows操作系统中非常重要的一种系统接口,用它可以轻松截获并处理在其他应用程序之间传递的消息,并由此可以完成一些普通应用程原创 2007-07-22 08:56:00 · 607 阅读 · 0 评论 -
标准输入与输出(Shell命令)
三.标准输入/输出和重定向1.标准输入与输出我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。我们以cat命令为例,cat命令的功能是从命令行原创 2007-07-22 10:36:00 · 5544 阅读 · 1 评论 -
构造特殊的UDP数据包能造成SQL Server服务器CPU负荷加重漏洞
漏洞描述: 由于SQL Server对1434端口的UDP没有限制,构造特殊的UDP包,SQL Server就一定会作出回应。如果收到大量的这些UDP包,SQL Server将消耗CPU,来处理这些UDP回应,虽然这不能造成主机当机等严重影响,但是CPU使用率将很容易达到100%,从而造成数据库服务器负荷加重,对其他服务(比如WEB)能造成拒绝服务。同时,恶意攻击者只需要对SQL Serve原创 2007-07-28 07:22:00 · 830 阅读 · 0 评论 -
VC中加载LIB文件的方法有以下三种
①LIB文件直接加入到工程文件列表中 在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件即可。 ②设置工程的 Project Settings来加载DLL的LIB文件 打开工程的 Project Settings菜单,选中Link,然后在Object/library modu原创 2007-11-08 11:40:00 · 2803 阅读 · 1 评论