http://blog.sina.com.cn/alazyboy[订阅][手机订阅]
个人资料
分类
    内容读取中…
评论
读取中...
友情链接
访客
读取中...
好友
读取中...
博文
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编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。

我们先定义一些常见类型变量借以说明

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