CmdHere(2009-06-10 10:01)
REGEDIT4
[HKEY_CLASSES_ROOT\*\shell\cmdhere]
@='Cmd&Here'
[HKEY_CLASSES_ROOT\*\shell\cmdhere\command]
@='cmd.exe /c start cmd.exe /k pushd \'%L\\..\''
[HKEY_CLASSES_ROOT\Folder\shell\cmdhere]
@='Cmd&Here'
[HKEY_CLASSES_ROOT\Folder\shell\cmdhere\command]
@='cmd.exe /c start cmd.exe /k pushd \'%L\''
编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。
造成LNK2005错误主要有以下几种情况:
1.重复定义全局变量。可能存在两种情况:
A、对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。正确的应该是在一个CPP文件中定义如下:int
g_Test;那么在使用的CPP文件中就应该使用:extern int g_Test即可,如果还是使用int
g_Test,那么就会产生LNK2005错误,一般错误错误信息类似:AAA.obj error LNK2005 int book
c?book@@3HA already defined in
BBB.obj。切记的就是不能给变量赋值否则还是会有LNK2005错误。
这里需要的是“声明”,不是“定义”!根据C++标准的规定,一个变量是声明,必须同时满足两个条件,否则就是定义:
(1)声明必须使用extern关键字;(2)不能给变量赋初值
所以,下面的是声明:
extern int a;
下面的是定义
int a; int a = 0; extern int a =0;
B、对于那么编程不是那么严谨的程序员,总是在需要使用变量的文件中
添加删除里没有IIS(2008-08-25 22:12)
1.先在相关网站上下载IIS5.1安装文件
2.把下载下来的IIS5压缩包解压到任意目录( 例如c:\iis51 )
3.在开始的运行里输入:'c:\Windows\inf\sysoc.inf',在[Components]里面加入一行,“iis=iis2.dll,OcEntry,iis2.inf,,7”,关闭该文件并保存.
4.在开始的运行里面输入:'CMD'进入命令行模式,输入:
'EXPand c:\iis51\iis.dl_ c:\Windows\system32\setup\iis2.dll '
'EXPand c:\iis51\iis.in_ c:\Windows\inf\iis2.inf '
此处的C:\IIS51是指下载后解压后的IIS文件目录,如果你解压在其他位置做相应的更改就可以了.
5.打开控制面板->添加/删除Windows组件,里面已经有Internet信息服务(IIS)的安装选项出现在安装列表里面了.像平常安装IIS一样安装就可以了,如果出现找不到文件,这时点击浏览,选择刚刚解压的目录就可以了,出现几次都一样处理就可以了.直到安装完成.
6.最后从管理工具里打开“Internet服务管理器”然后点“默认WEB站点”的右键,转到“目录安全性”选项卡,点“匿名访问和验证控制”的“编辑”按钮,回弹出匿名方法新窗口,再点击其中“匿名访问”中的“编辑”按钮,将“允许IIS控制密码”全面的勾去掉,
处理IOCP连接关闭(2008-04-29 10:02)
及时监测连接被动关闭
除非有特别要求,否则你应该总是对每个连接保持一个挂起的接收pending io
(使用WSARecv投递)。如果用户主动关闭连接,你的GetQueuedCompletionStatus调用将返回成功,但接收到的数据长度为0,你能根据这点检测连接是否已被对方关闭。如果连接被重置或者io被取消(如果你调用了CancelIo的话),GetQueuedCompletionStatus将返回失败,注意这时还应该判断GetQueuedCompletionStatus调用返回的lpOverlapped值,如果该值不为NULL,说明iocp已经检测到一个连接已经中断。
安全的关闭连接
很多人写的服务器网络库有一个难以接受的缺陷(包括我曾就职公司的一些同事),当服务器程序主动关闭连接时,刚发往客户端的包有时出现丢失,这时他们推荐的方式往往是发送数据后等待几秒再关闭连接。豪无疑问,这是一种笨拙的实现方式,他们遇到的问题根源是什么呢?
在非IOCP模式网络程序中,你只要简单的调用closesocket函数就可以确保数据在操作系统释放socket之前安全到达对方,但在IOCP模式下,如果调用closesocket时有未决的pending
IO将导致socket被重置,所以有时会出现数据
1.如何在Release状态下进行调试
Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选Disable(Debug),Debut
info选Program Database。在Link标签中选中Generate debug info复选框。
注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。
2. Release和Debug有什么不同
Release版称为发行版,Debug版称为调试版。
Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。
Release的exe文件链接的是标准的MFC DLL(Use MFC in a shared or static
dll)。这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装Visual C++
6.0的机器上运行。而Debug版本的exe链接了调试版本的MFC DLL文件,在没有安装Visual
FTP命令详解(2007-08-17 15:53)
注:带有星号的命令一般很少使用,所以往往在具体实现中不支持。
ABOR 放弃传输
*ACCT 某些系统将帐号和用户与文件系统相关联
*ALLO 为即将传送的文件分配空间。后面携带的参数来确定字节数
*APPE 将文件附加到已经存在的文件后面
CDUP 在远程系统上将当前目录切换到上级父目录
CWD 改变远程系统的工作目录
DELE 删除远程系统的文件
HELP 读取服务器的帮助信息,如:支持的命令的列表
LIST 在一个新建立的数据连接上发送当前工作目录下的文件名列表
MKD 创建目录
MODE 指定传输模式,可携带的参数是:S、B或 C.
NLST 在一个新建立的数据连接上发送一个当前目录下的“完全”的目录列表
NOOP 空操作,防止连接断掉
PASS 提供一个用户登录密码,必须立即跟随在USER命令后
*PASV 指定服务器数据传输过程监听等待客户端的数据连接连接建立请求
PORT 指定客户端监听等待服务器端建立的连
常用正则表达式(2007-08-14 18:12)
正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行
匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*?
/>
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配帐号是否合法(字母开头,允许5-16字节,允
VC常用数据类型使用转换详解(2007-05-23 14:24)
刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。
我们先定义一些常见类型变量借以说明
int i = 100;
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]='女侠程佩君';
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;
一、其它数据类型转换为字符串
短整型(int)
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
itoa(i,temp,2); ///按二进制方式转换
长整型(long)
ltoa(l,temp,10);
二、从其它包含字符串的变量中获取指向该字符串的指针
CString变量
str = '2008北京奥运';
buf = (LPSTR)(LPCTSTR)str;
BSTR类型的_variant_t变量
v1 = (_bstr_t)'程序员';
buf = _com_util::ConvertBSTRToString((_bstr_t)v1);
三、字符串转换为其它数据类型
strcpy(temp,'123');
短整型(int)
i = atoi(temp);
长整型(long)
l = atol(temp);
浮点(double)
1. 在任务栏隐藏对话框
ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);
2. 使对话框为顶层窗口
SetWindowPos(&this->wndTopMost, 0, 0, 0, 0,
SWP_NOMOVE|SWP_NOSIZE);
3. 在运行时添加最大化,最小化按钮
SetWindowLong(this->m_hWnd,
GWL_STYLE,GetWindowLong(this->m_hWnd, GWL_STYLE) |
WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
UpdateWindow();
4. 使能对话框右上角关闭按钮
在OnInitDialog中
方法一:
CMenu* menu = GetSystemMenu(FALSE);
menu->ModifyMenu(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED
);
方法二:
CMenu* menu = GetSystemMenu(FALSE);
menu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND |
MF_GRAYED);
5. 当对话框一部分在屏幕外时,显示全部对话框
SendMessage(DM_REPOSITION);
6. 改变鼠标外形
添加 WM_SETCURSOR 消息映射函数
BOOL CTest6Dlg::OnSetCurso
注:以下代码以一个名为CTest6Dlg的对话框类为例
1. 在任务栏隐藏对话框
ModifyStyleEx(WS_EX_APPWINDOW,
WS_EX_TOOLWINDOW);
2. 使对话框为顶层窗口
SetWindowPos(&this->wndTopMost, 0, 0, 0, 0,
SWP_NOMOVE|SWP_NOSIZE);
3.
在运行时添加最大化,最小化按钮
SetWindowLong(this->m_hWnd,
GWL_STYLE,
GetWindowLong(this->m_hWnd, GWL_STYLE) |
WS_MIN