C/C++/VC
文章平均质量分 79
ALENTAM
我更像个狙击手。
展开
-
亲密接触VC6编译器
大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢? 闲话转载 2008-03-10 15:47:00 · 366 阅读 · 0 评论 -
_beginthread还是CreateThread
程序员对于Windows程序中应该用_beginthread还是CreateThread来创建线程,一直有所争论。本文将从对CRT源代码出发探讨这个问题。 I. 起因今天一个朋友问我程序中究竟应该使用_beginthread还是CreateThread,并且告诉我如果使用不当可能会有内存泄漏。其实我过去对这个问题也是一知半解,为了对朋友负责,专门翻阅了一下VC的运行库(CRT)源代码,终于转载 2008-03-25 19:30:00 · 534 阅读 · 0 评论 -
Windows进程中的内存结构
在阅读本文之前,如果你连堆栈是什么多不知道的话,请先阅读文章后面的基础知识。 接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据。那么这些变量在内存中是如何存放的呢?程序又是如何使用这些变量的呢?下面就会对此进行深入的讨论。下文中的C语言代码如没有特别声明,默认都使用VC编译的release版。 首先,来了解一下 C 语言的变量是如何在内存分部的。C 语言有全局变量(Globa转载 2008-03-25 19:43:00 · 388 阅读 · 0 评论 -
API HOOK 金山词霸取词功能原理2
屏幕上的文字大都是由gdi32.dll的以下几个函数显示的:TextOutA、TextOutW、ExtTextOutA、ExtTextOutW。实现屏幕抓词的关键就是截获对这些函数的调用,得到程序发给它们的参数。 我的方法有以下三个步骤: 一、得到鼠标的当前位置 通过SetWindowsHookEx实现。 二、向鼠标下转载 2008-03-25 19:52:00 · 1170 阅读 · 3 评论 -
%s 与 %ls的区别
#include cstdio>#include cstdlib>#include clocale>#include cwchar>int main(int argc, char * argv[])...{ wchar_t wstr[] = L"中文"; setlocale(LC_ALL, "zh_CN.UTF-8"); wprintf(L"%s/n"转载 2008-04-11 10:06:00 · 2352 阅读 · 2 评论 -
setlocale
setlocale:函数原形为:char *setlocale( int category, const char *locale );头文件:所支持的操作系统为:ANSI, Win 95, Win NT对于简体中文可以使用如下设置:setlocale( LC_ALL, "chs" );为什么一定要调用setlocale呢?因为在C/C++语言标准中定义了其运行时的字符集环境为"C",也就是A转载 2008-04-11 10:25:00 · 8461 阅读 · 1 评论 -
#pragma预处理详解
在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #pragma para 其中para为参转载 2008-07-03 11:33:00 · 422 阅读 · 0 评论 -
LNK 2005
最近调试遇到N多LNK错误,遂总结各解决方案如下, 以做系统学习之用。一编译器处理相关 .预处理器-编译器-汇编器-链接器预处理器会处理相关的预处理指令,一般是以"#"开头的指令。如:#include "xx.h" #define等。编译器把对应的*.cpp翻译成*.s文件(汇编语言)。 汇编器则处理*.s生成对应的*.o文件(obj目标文件)最后链接器把所有的*.o文件链接转载 2008-07-03 14:53:00 · 753 阅读 · 0 评论 -
VC文件格式
.opt 工程关于开发环境的参数文件。如工具条位置等信息; .aps (AppStudio File),资源辅助文件,二进制格式,一般不用去管他. .clw ClassWizard信息文件,实际上是INI文件的格式,有兴趣可以研究一下.有时候ClassWizard出问题,手工修改CLW文件可以解决.如果此文件不存在的话,每次用ClassWizard的时候绘提示你是否重建. .dsp (Develo转载 2008-03-25 19:26:00 · 335 阅读 · 0 评论 -
Windows图像编程概要
图形设备接口(GDI,Graphics Device Interface)的主要目标之一是支持在输出设备(如视频显示器、打印机和绘图仪)上的与设备无关的图形。 GDI通过将应用程序与不同输出设备特性相隔离,使Windows应用程序能够毫无问题地在Windows支持的任何图形输出设备上运行。Windows中的图形基本上是由从GDI.EXE模块中输出的函数处理的(尽管一些绘制函数实际上具有USER.E转载 2008-03-25 19:42:00 · 557 阅读 · 0 评论 -
使用MAP文件快速定位程序崩溃代码行
作为程序员,平时最担心见到的事情就是程序发生了崩溃,无论是指针越界还是非法操作,都将给我们的应用系统造成巨大的损失。但在一个大型系统的测试过程中,初期出现程序崩溃似乎成了不可避免的事。其实测试中出现程序崩溃并不可怕,反而是测试的成功。我们更为关心的是程序中的哪一行导致了系统崩溃,这样我们才能有针对性的进行改正。 在VC中,我们可以利用出现程序崩溃时VC的自动跳转,定位到出错代码行。但在大量的压力转载 2008-03-25 19:39:00 · 448 阅读 · 0 评论 -
内存对齐及大小端
我们常常看到“alignment", "endian"之类的字眼, 但很少有C语言教材提到这些概念. 实际上它们是与处理器与内存接口, 编译器类型密切相关的.考虑这样一个例子: 两个异构的CPU进行通信, 定义了这样一个结果来传递消息:struct Message{ short opcode; char subfield; long message_length; char ver转载 2008-03-10 15:49:00 · 436 阅读 · 0 评论 -
公共对话框——OPENFILENAME结构
OPENFILENAMEOPENFILENAME结构包含了GetOpenFileName和GetSaveFileName函数用来初始化打开或另存为对话框的信息。在用户关闭对话框后,系统返回关于用户的选择信息到这个结构中。 typedef struct tagOFN { DWORD lStructSize; HWND hwndOwner转载 2008-03-19 17:38:00 · 456 阅读 · 0 评论 -
C语言文件操作函数大全
C语言文件操作函数大全clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf 表头文件 #include 定义函转载 2008-03-24 19:06:00 · 391 阅读 · 0 评论 -
VC++程序编译链接的原理与过程
VC++程序编译链接的原理与过程我们在EX10这个工程中,选择菜单中【Build】→【Rebuild All】,重新编译所有的工程文件,可以看到如下输出:从这个输出中,我们可以看到可执行程序EX10.exe的产生,经过了两个步骤:首先,C++编译器对工程中的三个源文件fish.cpp、animal.cpp单独进行编译(Compiling…)。在编译时,先由预处理器对预处理指令(#inc转载 2008-03-24 10:57:00 · 551 阅读 · 0 评论 -
LNK2001错误探究
学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难。 初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为: unresolv转载 2008-03-25 19:28:00 · 239 阅读 · 0 评论 -
VC编译语法解释
VC- Project Setting-Debug-Project Option语法解释-优化- /O1 最小化空间 minimize space /Op[-] 改善浮点数一致性 improve floating-pt consistency /O2 最大化速度 maximize speed /Os 优选代码空间 favor code space /Oa 假设没有别名 assume no alia转载 2008-03-25 19:29:00 · 443 阅读 · 0 评论 -
堆和栈的区别
1.申请方式 stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间 heap: 需要程序员自己申请,并指明大小,在c中malloc函数 如p1 = (char *)malloc(10); 在C++中用new运算符 如p2 = (char *)malloc(10); 但是注意p1、p2本身是在栈中的。 2 申请后系统的响应 栈:转载 2008-03-25 19:39:00 · 345 阅读 · 0 评论 -
DLL共享数据段
在主文件中,用#pragma data_seg建立一 个新的数据段并定义共享数据,其具体格式为: #pragma data_seg ("shareddata") //名称可以 //自己定转载 2008-03-25 19:46:00 · 1241 阅读 · 0 评论 -
API HOOK 金山词霸取词功能原理1
1 屏幕抓词 屏幕抓词(或者叫动态翻译)是指随着鼠标的移动,软件能够随时获知屏幕上鼠标位置的单词或汉字,并翻译出来提示用户。它对於上网浏览、在线阅读外文文章等很有帮助作用,因此许多词典软件都提供了屏幕抓词功能。 屏幕抓词的关键是如何获得鼠标位置的字符串,Windows的动态链接和消息响应机制为之提供了实现途径。 概括地说,主要通过下面的几个步骤来取得屏幕上鼠标位置的字符转载 2008-03-25 19:51:00 · 2167 阅读 · 0 评论 -
单键模式
单键模式保证一个类只有一个实例!实现的方法一般如下:1,私有化所有构造函数,禁止外部随意构造对象;2,实现该类的唯一对象,并使该类的使用者通过某种方法访问该对象。遵循这种思想,我想到一个最简单的实现,便是定义该类的一个public的静态数据成员供外部使用即可。class Singleton{private: // 所有构造函数public: static Singleton m转载 2009-04-22 11:33:00 · 891 阅读 · 0 评论