VisualC
yeah2000
每天进步一点
展开
-
Win32窗口程序显示Console
AllocConsole(); <br />freopen("CONOUT$", "w+t", stdout); <br />freopen("CONIN$", "r+t", stdin);<br /><br />设置程这样就可以了。我在一个按钮上执行以上代码,调用成功。不过还是会有意外的(具体是什么不说了,不具有一般性)。然后关闭控制台只要FreeConsole()就可以了。注意直接关闭控制台是会连主窗口一起关闭的(两者一心同体~)。可以这样使用户不能手动关闭控制台,在上面代码两个fopen之后写上:<转载 2010-12-12 20:01:00 · 696 阅读 · 0 评论 -
error C2872: ULONG_PTR : ambiguous symbol 问题的解决
error C2872: 'ULONG_PTR' : ambiguous symbol 问题的解决<br />在做DTE addin插件开发的时候,使用了atl的CString,出现如下的错误<br />vc/atlmfc/include/cstringt.h(2508): error C2872: 'ULONG_PTR' : ambiguous symbol<br />//省略错误信息<br /><br />原因是basetsd.h(123) : __w64 unsigned long ULONG_PTR转载 2010-12-12 20:02:00 · 1640 阅读 · 1 评论 -
VC++的Unicode编程
一、什么是Unicode<br /> 先从ASCII说起,ASCII是用来表示英文字符的一种编码规范。每个ASCII字符占用1个字节,因此,ASCII编码可以表示的最大字符数是255(00H—FFH)。其实,英文字符并没有那么多,一般只用前128个(00H—7FH,最高位为0),其中包括了控制字符、数字、大小写字母和其它一些符号。而最高位为1的另128个字符(80H—FFH)被称为“扩展ASCII”,一般用来存放英文的制表符、部分音标字符等等的一些其它符号。<br /> 这种字符编码规则显然用来处理英文转载 2010-12-12 20:02:00 · 412 阅读 · 0 评论 -
用WinDBG远程调试程序
在某些情况下我们需要进行远程调试(比如该程序运行需要时候全屏,或者程序在客户的机器上crash崩溃), 这时候可以使用WinDBG的远程调试功能。<br />WinDBG的远程调试由服务端和客户端组成,和visual studio类似。 被调试的机器是服务端(server), 我们做调试的机器是客户端(client)。 两台机器都需要安装WinDBG。<br />第一步, 建立WinDBG server 端。<br />使用 -server 参数可以使WinDBG 以服务器方式启动。 WinDBG可以用多种转载 2010-12-12 20:03:00 · 418 阅读 · 0 评论 -
在 WinDbg 脚本中使用参数
WinDbg 6.7.5.0 版本运行脚本时多了一个新的命令 $$>a<,可以给脚本传递参数。下面是一个简单的例子,演示了参数的用法。<br /><br />$$<br />$$ calc v0.0.1<br />$$ by 2007.06.08<br />$$<br /><br />.if(@@c++(${/d:$arg1} && ${/d:$arg2}))<br />{<br /> .printf "/n%d + %d = %d/n", ${$arg1}, ${$arg2}, ${$arg1} +转载 2010-12-12 20:03:00 · 602 阅读 · 0 评论 -
城里城外看SSDT
<br />本文链接:http://blog.titilima.com/show-201-1.html<br />引子<br /><br />2006年,中国互联网上的斗争硝烟弥漫。这时的战场上,先前颇为流行的窗口挂钩、API挂钩、进程注入等技术已然成为昨日黄花,大有逐渐淡出之势;取而代之的,则是更狠毒、更为赤裸裸的词汇:驱动、隐藏进程、Rootkit……<br />前不久,我不经意翻出自己2005年9月写下的一篇文章《DLL的远程注入技术》,在下面看到了一位名叫L4bm0s的网友说这种技术已经过时了。虽然转载 2010-12-12 20:03:00 · 404 阅读 · 0 评论 -
备忘:fopen()和fclose()的用法
open()和fclose()的用法<br /><br /><br />1.fopen()函数的用法<br />fopen函数用于打开文件, 其调用格式为:<br />FILE *fopen(char *filename, *type);<br />fopen()函数中第一个形式参数表示文件名, 可以包含路径和文件名两部分。如:<br />"B:TEST.DAT"<br />"C://TC//TEST.DAT"<br />注意:如果将路径写成"C:/TC/TEST.DAT"是不正确的, 这一点要特别注意。<转载 2010-12-12 20:04:00 · 417 阅读 · 0 评论 -
C/C++中的64位整数(__int64 and long long)
在做ACM题时,经常都会遇到一些比较大的整数。而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647。而unsigned范围是[0,2^32),即 0~4294967295。也就是说,常规的32位整数只能够处理40亿以下的数。<br /> 那遇到比40亿要大的数怎么办呢?这时就要用到C++的64位扩展了。不同的编译器对64位整数的扩展有所不同。基于ACM的需要,下面仅介绍 VC6.0与g++编译器的扩展。<br />转载 2010-12-12 20:05:00 · 921 阅读 · 0 评论 -
宽字符串和标准字符串的转换
//1<br />string WstringToString(wstring str)<br />{<br /> const wchar_t *pwc=str.c_str();<br /> int nLen=WideCharToMultiByte(CP_ACP,0,(LPCWSTR)pwc,-1,NULL,0,NULL,NULL);<br /> if(nLen<=0) return string("");<br /> char *presult=new char[nLen];<br转载 2010-12-12 20:08:00 · 676 阅读 · 0 评论 -
The GRETA Regular Expression Template Archive
The regular expression template library contains objects and functions that make it possible to perform pattern matching and substitution on strings in C++. They are:<br /> rpattern: the pattern to use during the search.<br /> match_res转载 2010-12-12 20:09:00 · 360 阅读 · 0 评论 -
在拷贝、删除文件时显示飞行的文件夹动画
#include <shellapi.h><br /><br /><br />// 复制根目录所有的文本文件到临时目录。 <br />char *From = "D://VS2008//*.*/0";<br />char *To = "E://a12345///0";<br />SHFILEOPSTRUCT op;<br />ZeroMemory(&op, sizeof(op));<br />op.hwnd = m_hWnd;<br />op.wFunc = FO_COPY;<br />op.pFrom =转载 2010-12-12 20:10:00 · 563 阅读 · 0 评论 -
将CMD的输入输出重定向到自己的进程
void CreateMyPipe()<br />{<br /> //创建管道<br /> CreatePipe(&hReadPipe, &hWritePipe, NULL, NULL);<br /> CreatePipe(&hChildReadPipe, &hChildWritePipe, NULL, NULL);<br /><br /><br /> SetHandleInformation(hWritePipe, HANDLE_FLAG_INHERIT, HANDLE_FLAG_转载 2010-12-12 20:10:00 · 509 阅读 · 0 评论 -
使用MiniDumpWriteDump API 来生成程序的Dump
MiniDumpWriteDump是MS DbgHelp.dll 中一个API, 用于导出当前运行的程序的Dump. 这个dll程序系统中就有, 但是很多软件, 都在自己的安装目录下保存了这个.dll的最新的版本.<br /> 目的是当有异常发生的时候, 自动生成Dump文件供之后的分析. 有了Dump文件, 我们就可以使用WinDBG等调试器来分析异常发生时的情况. 其实这个功能很多软件都有, 比如QQ, 魔兽世界, 等等. 它们在出现了异常的时候会弹出一个对话框, 让用户输入异转载 2010-12-12 20:11:00 · 669 阅读 · 0 评论 -
类型重定义解决办法
<br /> 下载的代码与vc++自身的类型定义重复使用命名空间来解决。<br /> 定义改变如下:<br />namespace IPAddr_redefine<br />{<br />struct IPAddr {<br />unsigned char AddrByte[4];<br />};<br />}<br /><br /><br />在所有使用到该定义的文件头加入:<br />using namespace IPAddr_redefine;<br />将所有转载 2010-12-12 20:18:00 · 614 阅读 · 0 评论 -
C++完美实现Singleton模式
Singleton模式是常用的设计模式之一,但是要实现一个真正实用的设计模式却也不是件容易的事情。<br />1. 标准的实现<br />class Singleton<br />{<br />public:<br /> static Singleton * Instance()<br /> {<br /> if( 0== _instance)<br /> {<br /> _i转载 2010-12-12 20:19:00 · 435 阅读 · 0 评论 -
正则表达式 sscanf
名称: sscanf() - 从一个字符串中读进与指定格式相符的数据.<br />语法: int sscanf( string str, string fmt, mixed var1, mixed var2 ... );<br /><br />整数 sscanf( 字符串 str, 字符串 fmt, 混合 var1, 混合 var2 ... );<br />用法: 以指定的格式 fmt 去解读字符串 str. fmt 中除了 %d 和 %s 以外, 亦可包含其他的字符串作为格式. 每一个 %d 或 %转载 2010-12-12 20:27:00 · 460 阅读 · 0 评论 -
VC2008中配置与使用boost库正则表达式
<br />本文介绍使用boost库正则表达式来解决字符匹配、搜索、替换等应用。<br />1、下载与安装boost库<br /> 有关boost的使用可以参考http://www.boost.org/<br /> <br />2、编译动态库,本文只要支持正则表达式就可以,因此只需要编译E:/boost/libs/regex/build目录下的文件。这步比较关键。<br /> 具体操作:<br /> 在“运行”里输入“cmd”,打开命令提示符;<br /> 输入命令“cd E:/boost/li转载 2010-12-12 20:27:00 · 618 阅读 · 0 评论 -
WinLogon事件通知包
首先我们要了解一下WinLogon,他是负责提供给用户交互式界面的一个程序。<br /> WinLogon初始化时会创建3个桌面:<br />(1)、winlogon桌面:主要显示window 安全等界面,如你按下CTRL+ALT+DEL,登陆的界面等<br />(2)、应用程序桌面:我们平时见到的那个有我的电脑的界面(这个大家都见过了吧,呵呵)<br />(3)、屏幕保护桌面:屏幕保护显示界面。 <br /> Winlogon通知包(Winlogon Notif转载 2010-12-12 20:30:00 · 1067 阅读 · 0 评论 -
进程操作
1. 当前程序的PID<br /> DWORD dwProcessId;<br /> GetWindowThreadProcessId(this->m_hWnd, &dwProcessId);<br />2. 通过进程ID取主窗口句柄<br /> HWND Wnd=GetProcessMainWnd(iPid);<br /> HWND GetProcessMainWnd(DWORD dwProcessId)<br /> {<br /> WNDINFO wi;<转载 2010-12-12 20:31:00 · 372 阅读 · 0 评论 -
让你团队里所有人在编译工程时都要看你的代码注释
1.在xxxx.h中定义宏如下:#ifndef PRO_MSG<br /> #define __PRO_STR(x) #x<br /> #define __PRO_STR2(x) __PRO_STR(x)<br /> #define PRO_MSG(desc) message(__FILE__ "(" __PRO_STR2(__LINE__) "): " desc)<br />转载 2010-12-12 20:32:00 · 412 阅读 · 0 评论 -
lucene多种搜索方式详解例子
package src;<br />import java.io.StringReader;<br />import java.util.Date;<br />import org.apache.lucene.analysis.Analyzer;<br />import org.apache.lucene.analysis.SimpleAnalyzer;<br />import org.apache.lucene.analysis.TokenStream;<br />import org.apache.lu转载 2010-12-12 21:03:00 · 426 阅读 · 0 评论 -
水晶报表
水晶报表之Visual C++2003简单使用方法<br /> <br />1.加入命名空间<br />#import "C://Program Files//Common Files//Crystal Decisions//1.0//Bin//craxddrt20.dll" no_namespace<br />2.定义变量<br />public:<br /> IApplicationPtr m_Application;<br /> IReportPtr m_Report;<br />3.简单使用(不使用转载 2010-12-12 21:09:00 · 423 阅读 · 0 评论 -
什么是GUID?
GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成GUID的API。生成算法很有意思,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。GUID的唯一缺陷在于生成的结果串会比较大。 <br />1// .net 中使用GUID <br />2private void Button1_Click(object sender, System.EventArgs e) <br />3 { <br />4转载 2010-12-12 21:10:00 · 823 阅读 · 0 评论 -
对话框全屏显示背景图片
int m_ncxScreen = GetSystemMetrics(SM_CXSCREEN);<br /> int m_ncyScreen = GetSystemMetrics(SM_CYSCREEN);<br /> //Set this window's size to full screen<br />// SetWindowPos( &wndTopMost , 0 , 0 , m_ncxScreen , m_ncyScreen , SWP_SHOWWINDOW);<br /> H转载 2010-12-12 21:14:00 · 603 阅读 · 0 评论 -
动态结构体
一、结构体<br />typedef struct{<br /> byte IP[4];<br /> int port;<br /> CString Data;<br />}MyRecData;<br />二、结构变量<br />MyRecData MyTempRec;<br />CArray<MyRecData,MyRecData&>m_sMyRecData;<br />三、赋值<br />MyTempRec.Data="sfd";<br />MyTempRec.IP[0]=192;<br />MyTem转载 2010-12-12 21:14:00 · 534 阅读 · 0 评论 -
一些技巧(12)
从DLL中加载一个对话框资源<br />xxxDlg dlg;<br />AFX_MANAGE_STATE(AfxGetStaticModuleState());<br />int ret=dlg.DoModal();<br />==========================================================================================<br />DWORD GetMyDiskSerialNo()//获得磁盘序列号<br />{<br转载 2010-12-12 21:15:00 · 492 阅读 · 0 评论 -
一些技巧(10)
CString GetForegroundWndFocusWndText(void) <br />{ <br /> CWnd*mainwnd,*subwnd; <br /> DWORD dwthreadforeground,dwthreadthis;//获得当前活动窗口 <br /> mainwnd=GetForegroundWindow();//获得活动窗口的线程号 <br /> dwthreadforeground=::GetWindowThreadProcessId(mainw转载 2010-12-12 21:15:00 · 381 阅读 · 0 评论 -
一些技巧(8)
命令行 <br />CCommandLineInfo cmdInfo; <br />ParseComandLine(cmdInfo); <br />if(!ProcessShellCommand(cmdInfo)) <br />return FALSE; <br />=========================================================== <br />改变对话框背景颜色 <br />SetDialogBkColor(RGB(0,0,255),RGB(255,25转载 2010-12-12 21:16:00 · 449 阅读 · 0 评论 -
CListCtrl使用详解
1。先来介绍REPORT类型的CListCtrl: <br />首先使用下面的语句设置CListCtrl的style: <br />DWORD SetExtendedStyle( DWORD dwNewStyle ); <br />其中 <br />LV*_**_CHECKBOXES 表示添加CheckBox <br />LV*_**_FULLROWSELECT 表示选择整行 <br />LV*_**_GRIDLINES 表示添加表格线 <br />如果设置了LV*_**_CHECKBOXES属性,则可以用转载 2010-12-12 21:17:00 · 566 阅读 · 0 评论 -
写文件(内容追加)
CString str; <br />str.Format("%s/r/n",szMessage); <br />CFile f("d://rr.txt",CFile::modeWrite|CFile::modeCreate|CFile::modeNoTruncate); <br />f.SeekToEnd();//定位到文件尾,不覆盖原来的东西 <br />f.Write(str.GetBuffer(),str.GetLength()); <br />f.Close()转载 2010-12-12 21:17:00 · 715 阅读 · 0 评论 -
软件使用协议-介绍
Mozilla Public License MPL License,允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者。 这种授权维护了商业软件的利益,,它要求基于这种软件得修改无偿贡献版权给该软件。 这样,围绕该软件得所有代码得版权都集中在发起开发人得手中。但MPL是允许修改,无偿使用得。 MPL软件对链接没有要求。<br /> BSD开源协议 BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码, 也可以将修改后的代码作为开源或者专有软件再转载 2010-12-12 20:01:00 · 332 阅读 · 0 评论 -
string和wstring相互转换
//第一种方法:调用WideCharToMultiByte()和MultiByteToWideChar(),代码如下(关于详细的解释,可以参考《windows核心编程》): <br />#include <string> <br />#include <windows.h> <br />using namespace std;<br /><br />//Converting a WChar string to a Ansi string <br />std::string WChar2Ansi(LP转载 2010-12-12 20:01:00 · 364 阅读 · 0 评论 -
CLSID与ProgID转换
1.<br />ProgID是程序员给某个CLSID指定一个易记的名字。<br />组成:<program>.<component>.<version><br />在HKey_Classes_Root下,有版本号的ProgID和无版本号的ProgID都有列出,一般无版本号的除了有CLSID子键外会还有CurVer子键来标明版本<br /><br />2.<br />12.1.2 CLSID和ProgID相互转换<br />1.问题阐述<br />每一个COM组件都需要指定一个 CLSID,并且不能重名,C转载 2010-12-12 20:01:00 · 1300 阅读 · 0 评论 -
Console程序显示彩色文本
#include<windows.h> <br />#include<iostream> <br />using namespace std; <br />/** <br />其文本与背景颜色能够是FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, <br />BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED, and BACKGROUND_INTENSIT转载 2010-12-12 20:02:00 · 429 阅读 · 0 评论 -
安装IE8后,VS2008无法调试ActiveX的问题
1. 点击【开始】->【运行】 命令:regedit.<br />2. 定位到HKEY_LOCALMACHINE -> SOFTWARE -> Microsoft -> Internet Explorer -> Main<br />3. 在【右边区域】【右键】新建一个名称为TabProcGrowth的DWORD值, 数值数据设置为0.<br />VS不用重启,直接可以按F5进行调试ActiveX了!<br />转载 2010-12-12 20:02:00 · 550 阅读 · 0 评论 -
应该熟知的定律
1、当你对某件事情抱着百分之一万的相信,它最后就会变成事实。<br /><br />2、期望定律 期望定律告诉我们,当我们怀着对某件事情非常强烈期望的时候,我们所期望的事物就会出现。<br /> <br />3、情绪定律 情绪定律告诉我们,人百分之百是情绪化的。即使有人说某人很理性,其实当这个人很有"理性"地思考问题的时候,也是受到他当时情绪状态的影响,"理性地思考"本身也是一种情绪状态。所以人百分之百是情绪化的动物,而且任何时候的决定都是情绪化的决定。<br /> <br />4、因果定律 任何事情的发生转载 2010-12-12 20:02:00 · 319 阅读 · 0 评论 -
编程珠玑--位图法排序
题目:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7,且所有正整数都不重复。求如何将这n个正整数升序排列。<br />约束:最多有1MB的内存空间可用,有充足的磁盘存储空间。<br /> <br />分析:这个题目的最大亮点是只有1MB的内存空间,我们可以通过计算得出,内存只有1MB可以储存的int(4byte)有10^3*10^3/4=250 000个号码。而包含正整数的文件约为10^7个int大小。这意味着无法将所有文件中的正整数一次读取进入到内存空间中去进行排序算法。因此衍生出下面两种转载 2010-12-12 20:02:00 · 473 阅读 · 0 评论 -
HubbleDotNet 和 Lucene.Net 匹配相关度的比较
在使用 Lucene.net (Lucene java 版本也是一样)后会感觉Lucene.net 的匹配相关度存在问题,搜索得到的结果往往不是希望的结果,不完全匹配的记录往往比完全匹配的记录排序还要靠前,很多人试图通过分词来解决,中文环境搜索,分词确实能解决一些问题,但不能根本解决问题,而英文环境下,分词根本无法解决任何问题。问题的本质是由于Lucene的得分算法缺陷造成的,不改进得分算法根本不能根本解决问题。HubbleDotNet的得分算法参考了Lucene的得分算法并做了重大改进,转载 2010-12-12 20:02:00 · 429 阅读 · 0 评论 -
WINDBG 相关命令
1、基本命令帮助<br />(1)断点指令B[C|D|E] [<bps>]<br />clear|disable|enable breakpoints<br /><br />BL<br />list breakpoints<br /> <br />BP <address><br />set soft breakpoints<br /> <br />BA <access> <size> <addr><br />break on access<br /> <br />(2)数据查看指令<br />D[type]转载 2010-12-12 20:02:00 · 541 阅读 · 0 评论 -
source文件编写
# $Id$<br />TARGETNAME=USBFilters<br />TARGETPATH=obj<br />TARGETTYPE=DRIVER<br /><br /># Create browse info<br />#BROWSER_INFO=1<br />#BROWSERFILE=<some path><br /><br /># Additional defines for the C/C++ preprocessor<br />C_DEFINES=$(C_DEFINES)<br /><br转载 2010-12-12 20:04:00 · 647 阅读 · 0 评论