
VC
headmaster110
这个作者很懒,什么都没留下…
展开
-
extern
extern 声明外部变量或函数,标示变量或函数的定义在别的文件中; 在1.h中声明外部外部变量,在所有包含1.h的cpp文件中,必须有一个cpp文件对exter变量进行定义且只能定义一次(可以有多个声明,但定义只能有一个!!); 源代码到exe可执行文件,都是经过三个过程:预编译--编译Compile--连接Linking;extern声明变量后,编原创 2009-11-24 10:59:00 · 642 阅读 · 0 评论 -
修改VC工程名称
<br />按照下面三步就可以修改VC工程的名称:<br />1.将原来的工程文件(.dsp文件)重命名为新的工程名;<br />2.用记事本打开工程文件,将工程文件中出现的原有工程名改成新的工程名,包括资源文件;<br />3.修改资源文件(.rc)的名称;原创 2010-09-25 16:15:00 · 843 阅读 · 0 评论 -
变量名
<br />1.变量: 用来标识一块内存区域,这块区域一般可以更改;<br />2.变量名: 一个标识符,用来指代一块内存区域,即变量;使用变量可以让我们以区域,块为单位操作内存,提高效率;<br /> 在机器代码中是不会出现变量名的;变量名是让程序员操作内存用的!<br /> 对于编译器,它会收集我们的变量名:<br /> int a: 编译器的工作: 1.为变量分配4字节的内存空间; 2.把变量名保存进符号表; 3.用这个符号表的索引对应实际的空间;<br /> 如果出现b =原创 2010-09-26 16:05:00 · 1948 阅读 · 0 评论 -
ShellExecute详解
<br />ShellExecute()功能: 运行一个外部程序,并对外部程序有一定的控制.<br />原型:<br /> HINSTANCE ShellExecute( HWND hwnd, <br /> LPCTSTRlpOperation,<br />原创 2011-01-19 11:06:00 · 1297 阅读 · 0 评论 -
__declspec(dllexport) 和 __declspec(dllimport))
一. DLL 中导出函数的声明有两种方法:(1).采用模块定义(.def)文件声明,def文件为连接器提供了有关被连接程序的导出,属性及其他信息 说明: 1.LIBRARY语句说明.def文件相应的DLL; 2.EXPORTS语句后列出要导出函数的名称。可以在.def文件中的导出函数名后加@n,表示要导出函数的序号为n; 3.def 文件中的注释由每个注释行开始处的分号 ";" 指定,且注释不能与语句共享一行。(2). 在函数声明中加上__declspec(原创 2011-02-12 17:30:00 · 848 阅读 · 0 评论 -
Windows Socket五种I/O模型
如果你想在Windows平台上构建服务器应用,那么I/O模型是你window 服务器平台必须考虑的。Windows操作系统提供了选择(Select)、异步选择(操作系统 window selectWSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I/O(Overlapped I/O)和完成端口wsaasyncselect wsaeventselect overlap(Completion Port)共五种I/O模型。每一种模型均适用于一种特定的complet port 适转载 2011-02-15 17:28:00 · 1023 阅读 · 0 评论 -
删除Internet缓存
<br /> 用浏览器浏览网页时,所有的网页资源其实都已经下载到本地,浏览器会把这些网页资源统一放到一个文件夹"Temporary Internet Files"里.可以通过查看"Internet临时文件"查看到所有的网页资源.以IE浏览器为例:依次打开 工具-Internet选项,"常规"页签里有个"Internet临时文件","设置"按钮里可以查看,移动,删除这些临时文件.<br /> IE缓存避免了网页占用过多内存,下次再浏览这些网页时就可以直接从缓存中读取,不需要重新下载,加快浏览速度原创 2011-04-20 11:52:00 · 2583 阅读 · 0 评论 -
判断系统中的CPU 是Little endian 还是Big endian 模式
Little endian 和Big endian 是CPU 存放数据的两种不同顺序。对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而Little endian 则相反,原创 2011-07-04 11:10:12 · 2734 阅读 · 0 评论 -
DAMAGE: after Normal block (#) at 0x....错误分析
在大量试用动态内存分配时很容易发生错误,譬如:,发现这个问题时,我很郁闷,因为这个bug不是经常出现的!经过大量的数据去测试,才发现这样的问题,根据不断的重复调试,最后定位到delete;new和delete的代码行很简单;就一行代码,问题出现在这里,应该就是内存操作出现问题原创 2011-09-08 14:41:42 · 7593 阅读 · 3 评论 -
BSTR与CString之前的转换
一. BSTR是进行COM编程时试用的字符串类型,对BSTR类型变量进行复制有两种方式: 1. CString提供的转换函数,CString::AllocSysString来进行转换:CString str("Hockey is Best!");BSTR bs原创 2011-10-17 11:30:07 · 775 阅读 · 0 评论 -
fatal error C1088
今天用VC6编译一个原来的工程,出现链接错误: fatal error C1088: Cannot flush compiler intermediate file: 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\a12072ex': No space left on device 之类的错误. 报错的原因居然是C盘空间不足!!...-_-|||原创 2011-10-24 11:25:43 · 5181 阅读 · 2 评论 -
C程序为例内存分布详解
附程序分布图:程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)— 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静转载 2012-03-04 11:29:31 · 793 阅读 · 0 评论 -
使用动态光标
静态光标文件*.cur既可以定义在资源文件,也可以动态加载,但动态光标*.ani只能通过文件方式使用LoadCursorFromFile函数装入!原创 2012-03-25 18:07:39 · 1427 阅读 · 0 评论 -
数组名
数组名是一个比较特殊的存在.我们都知道的就是数组名是数组的首地址,初学的可以把它理解成指针,通过指针操作可以获取数组内容; 但它跟指针还是有区别的:指针是一个变量,指向一块空间,同时指针本身也存储在某个空间;而数组名是符号地址常量,在编译时求值并存在编译器的符号表里面,其值就是个内存地址,可以认为程序没有给其分配空间,数组名只是代表了那个数组空间; char ch[100原创 2012-06-08 10:37:36 · 855 阅读 · 0 评论 -
Win32DLL源码换编译器
之前用VC6写了个数据包解码的DLL,框架比较简单,里面全部是字符串的拆分组合解析!前几天想把这些代码转到VS2008上面去编译!用VS直接创建了个空的DLL工程,然后把原有代码全部添加到新的工程里面(包括模块定义文件def)!编译通过,完全没问题! 用Dependency Walker一看,发现问题了!导出函数列表是空的!打开工程找到模块定义文件,里面没问题啊!全部导出函数都在!重新编译原创 2012-05-22 17:17:33 · 929 阅读 · 0 评论 -
格式化固定长度字符串,格式化字符串里显示百分号
一. 在编程过程中经常需要格式对齐,这就需要把字符串格式成固定长度: 1: C++提供了setiosflags()来设置输出格式,setw(int)设置输出宽度: cout cout原创 2011-05-17 17:02:00 · 12571 阅读 · 0 评论 -
(转载)VC 操作 OutLook的方法
<br />//vc 好像msdn里面对这个说的不是很清楚,vb道是有实例,和vc很类似拉可以参考的。<br />我是在mfc里面实现的 <br />首先在stdafx.h里面加入如下:<br />#import "C:/Program Files/Common Files/Microsoft Shared/OFFICE11/mso.dll" rename_namespace("Office"), named_guids<br />#import "C:/Program Files/Microsoft O转载 2010-08-17 16:06:00 · 1933 阅读 · 1 评论 -
32位高低字节拆分与合并
<br /> 在MFC中一个32位整数基本都包括高字节数据和低字节数据;<br /> 1. 可以利用LOWORD()和HIWORD()获取它的高字节数据和低字节数据:<br /> int nLow = LOWORD(lParam);<br /> int nHig = HIWORD(lParam);<br /> 2.也可以利用MAKELONG()宏来讲两个16位数合并成32位数:<br /> WORD one = 200;<br /> WORD two = 300原创 2010-08-16 15:37:00 · 9843 阅读 · 0 评论 -
在release版本调试程序
<br /> 有时候程序在Debug版本下能够正常运行.而在release版本下就会出现问题.所以有时候需要在release版本下调试程序;<br /> 设置步骤:<br /> 1.Project->setings->C/C++,"Optimization"组合框选择"Default"选项;<br /> 2."Debug info"组合框选择"Program DataBase for Edit and Continue";<br /> 3.在"Link"选项卡中选中"Generate deb原创 2010-08-12 12:02:00 · 644 阅读 · 0 评论 -
(转)串口通讯中的DCB结构
typedef struct _DCB { // dcb DWORD DCBlength; // sizeof(DCB) DWORD BaudRate; // current baud rate 指定当前的波特率 DWORD fBinary: 1; // binary mode, no原创 2010-01-20 16:18:00 · 523 阅读 · 0 评论 -
PeekMessage
只有一种情况需要使用PeekMessage来建立消息队列,那就是PeekMessage之后会有一段时间执行某项工作,然后才正式消息循环,但是消息循环之前可能会有别的线程向你的线程发送消息过来,此时就要预先建立消息队列。原创 2010-01-21 09:48:00 · 458 阅读 · 0 评论 -
改变工具栏的背景色,刷新工具栏
1.添加WM_ERASEBKGND()消息响应函数OnEraseBkgnd(CDC* pDC);{ CRect rect; CPaintDC dc(this); GetClientRect(rect); //获取客户区的大小 pDC->FillSolidRect(rect,RGB(100,100,180); //填充背景色 return true;原创 2010-01-28 11:53:00 · 971 阅读 · 0 评论 -
VC在对话框中显示网页并对网页进行操作
一:显示网页1. 添加"Microsoft web浏览器"控件:Add to Project ->Components and controls->Registered ActiveX Controls->Microsoft Web 浏览器2. 添加控件到对话框;3. 为控件添加变量:CWebBrowser2 m_web;4. 添加返回变量 VA原创 2009-12-14 20:50:00 · 6549 阅读 · 1 评论 -
ASCII码表完整版
ASCII码表完整版ASCII值控制字符ASCII值控制字符ASCII值控制字符ASCII值控制字符 0 NUT 32 (space) 64 @ 96 、1 S原创 2010-02-26 09:52:00 · 440 阅读 · 0 评论 -
SPY++实例应用-对不知道WindowName的控件的操作
1.利用SYP++查看WIFITRAY程序的主窗口,打开Properties查看Window Caption:WIFI TRAY,ClassName:#32770 (Dialog)HWND hParWnd = ::FindWindow("#32770","WIFI TRAY"); //查找主窗口的句柄2.利用SYP++查看WIFITRAY程序的主窗口上的一个Window Caption为原创 2010-02-26 10:03:00 · 1283 阅读 · 0 评论 -
带复选框的CTreeCtrl响应复选消息
1.在对话框中添加CTreeCtrl控件并勾选Check Boxes选项,为CTreeCtrl控件添加CTreeCtrl变量m_tree;2.为CTreeCtrl控件添加NM_CLICK消息响应函数OnClickTree();代码如下:OnClickTree(NMHDR* pNMHDR, LRESULT* pResult) { CPoint point; UINT uFl原创 2009-12-29 13:14:00 · 8885 阅读 · 2 评论 -
EASY_SIZE:控件随窗口变化自由调整大小
1.设置对话框属性:Styles->Broder:Resizing2.添加#include"easysize.h"3.在对话框类定义的最前面添加DECLARE_EASYSIZE(注意:没有分号)4.在对话框的OnInitDialog消息函数中添加:OnInitDialog(){ CDialog::OnInitDialog(); ........原创 2009-12-29 14:24:00 · 4577 阅读 · 0 评论 -
多网卡FTP测试,绑定本地IP地址
如果您有多个接口并为每个接口配置了一个默认网关,那么默认情况下 TCP/IP 将根据接口速度自动计算接口跃点数。此接口跃点数将成为所配置的默认网关的路由表中的默认路由的跃点数。最高速度的接口具有默认路由的最低跃点数。这样,只要在多个接口上配置多个默认网关,就会使用最快速度的接口将通信转发到其默认网关。如果相同速度的多个接口具有相同的最低接口跃点数,那么根据绑定顺序,将使用第一个网络适配器的原创 2010-03-19 12:01:00 · 4717 阅读 · 0 评论 -
清空internet临时文件夹Temporary Internet Files
在XP平台上,直接调用DeleteFile()函数是不能删除临时文件夹里面的文件的!需要调用FindFirstUrlCacheEntry()和FindNextUrlCacheEntry()查找Internet Cache的入口,获取缓存文件夹里文件的信息,然后调用DeleteUrlCacheEntry()删除指定文件名的缓存文件; 添加头文件:wininet.h添加引入库: Win原创 2010-05-17 13:57:00 · 2598 阅读 · 2 评论 -
CListctrl扩展样式
调用DWORD SetExtendedStyle(DWORD dwNewStyle )函数设置CListCtrl的扩展样式;dwNewStyle指定的扩展样式 LVS_ALIGNLEFT //以图标向左对齐 LVS_EX_GRIDLINES //绘制表格 LVS_EX_SUBITEMIMAGES原创 2010-05-25 15:39:00 · 1719 阅读 · 0 评论 -
数组名作为函数参数
函数名作为函数参数的形式: 1.void fun1(char *a,int length); //数组名 { for(int i = 0; i cout } 2.void fun2(char a[],int原创 2010-05-27 12:10:00 · 2672 阅读 · 0 评论 -
判断字符串中的中文字符
中文字符是按照双字节编码的;也就是说一个中文字符占两个字节;通过判断当前字符是否是双字节边个的前一个字节就可以判断字符串中是否有中文汉字;函数: BOOL IsDBCSLeadByte( BYTE TestChar );功能: 判断TestChar是否是双字节编码的前一个字节;代码如下: void main(){ char ch[] = "I am 校原创 2010-05-27 17:01:00 · 1069 阅读 · 0 评论 -
PreTranslateMessage解析
virtual BOOL PreTranslateMessage( MSG* pMsg );功能: 在消息被分派到Windows的TranslateMessage和DispatchMessage函数之前进行转换。参数: pMsg指向一个MSG结构,其中包含了要处理的消息。返回值: 如果消息被转换但是不会被分派,则返回非零值;如果消息没有被转换并且要被分派,则返回0。原创 2010-05-28 17:19:00 · 982 阅读 · 0 评论 -
VC6调试时弹出find resource对话框
调试程序时会经常弹find resource对话框出现这种情况基本都是按F11调试时和调试到系统函数时出现的; F10是Step Over,也就是有函数的时候直接执行完。 F11是Step Into,也就是有函数的时候跟进去单步执行。 在调试到系统函数处时,按F11想跟进去,可是工程中根本就没有记实现系统函数的源代码(也就是find resource对话框需要你找的文件),系统当然要手动的找到那个文件了。原创 2010-05-31 17:33:00 · 1244 阅读 · 0 评论 -
#pragma命令详解
#pragma命令的作用: 是设定编译器的状态或者是指示编译器完成一些特定的动作. 格式: #pragma 参数 1.#Pragma message(“消息文本”) :在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。 2.#pragma code_seg( ["section-name"[,"section-class"] ] ) : 设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。 3.#pragma once :原创 2010-06-11 11:12:00 · 733 阅读 · 0 评论 -
windows服务操作
在平时的开发的过程中会涉及到一些系统服务或用户自定义服务的操作.下面主要从两方面简单讲述服务的操作:一. 对现有服务的操作: 1.任务的服务操作第一步必须打开服务管理对象: OpenSCManager(); 2.通过"服务显示名称"(Display Name)获取"服务名称"(Service Name): GetServiceKeyName();显示名称可以原创 2013-04-01 14:04:35 · 988 阅读 · 0 评论