
C++
lhsxsh
aaaaaaaaaaaaaaa
展开
-
VC++6开发Windows服务程序
下面介绍使用VC++开发Windows服务程序。 首先运行VC++6,选择新建工程,在出现的下面窗口中选择”ATL COM AppWizard“,并选择工程放置位置和相应的工程名,然后选择确定按钮。此时出现如下图窗口界面,在此界面中选择”服务(EXE)“,然后选择完成按钮。在接下来的窗口中选择确定按钮。则VC完成向导并生成相应代码(效果如下)。转载 2011-12-28 14:13:14 · 8407 阅读 · 0 评论 -
关于_MSC_VER的详细说明
_MSC_VER分解如下: MS:Microsoft(微软)的简写 C:MSC就是Microsoft出的C编译器。 VER:Version(版本)的简写。 全部加在一起就是:Microsoft出的C编译器的版本 这是微软的预编译控制,在_MSC_VER较小时,它对一些东西的支持与新版不同。具体如下:defines转载 2009-05-18 17:28:00 · 1338 阅读 · 0 评论 -
VC常用技巧
1. 怎么来获取应用程序的实例句柄? 应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用AfxGetInstancdHandle获得句柄。 例子: HANDLE hInstance=AfxGetInstanceHandle(); 2. 怎么通过代码获得应用程序主窗口的指针? 主窗口的 指针保存在CWinThread::m_pMainWnd转载 2009-05-15 13:54:00 · 583 阅读 · 0 评论 -
C标准中一些预定义的宏
C标准中指定了一些预定义的宏,对于编程经常会用到。下面这个表中就是一些常常用到的预定义宏。__DATE__进行预处理的日期(“Mmm dd yyyy”形式的字符串文字)__FILE__代表当前源代码文件名的字符串文字__LINE__代表当前源代码中的行号的整数常量__TIME__源文件编译时间,格式微“hh:mm:ss”__func__当前所在函数名 对于__FILE__,__LIN转载 2009-05-19 16:13:00 · 2310 阅读 · 0 评论 -
数据类型转换的整理
说明:本文纯粹是总结一下有关类型转换的贴子,本人并未对所有方法都做测试,仅仅是为了给大家一个参考。读者层次:初学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_转载 2009-05-15 14:00:00 · 943 阅读 · 0 评论 -
通信长连接并包头+包长处理方式
第一种方式: // 向服务器发送数据 SOCKET soc = *( ks->GetSocket() ); char xmlLen[4]; // 表示包体长度的串 char redstr[1024]; // 一个完整的数据包 // char sendBuffer[512]; // 发缓冲 int bodyLength = 0; // 包长度 int ret; // soc原创 2009-05-08 18:05:00 · 2508 阅读 · 0 评论 -
windows下实现微秒级的延时
1.微秒级的延时肯定不能基于消息(SetTimer函数),因为一出现消息堵塞等就会影响精度,而且setTimer单位才是毫秒.实际响应时间可能要到55毫秒左右.2.微秒级的延时也不能不能基于中断,VxD最快的时钟服务程序Set_Global_Time_Out函数才能保证1毫秒的精度.其他挂接int 8H中断处理函数等,只能保证55ms的精度.(有时还不能)3.因此可以想到汇编下的那种基于循环执行语原创 2009-05-05 13:51:00 · 6650 阅读 · 1 评论 -
检测代码运行效率 GetTickCount()的使用
调试程序的时很多时候都想知道自己写的程序运行的效率,也就是说因该得到这段程序运行的时间,我下面介绍这个函数就可以完成这个功能,她就是:GetTickCount() 下面是MSDN上的解释: GetTickCount The GetTickCount function retrieves the number of milliseconds that have ela原创 2009-05-05 11:22:00 · 2017 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(sta原创 2009-05-04 19:00:00 · 548 阅读 · 0 评论 -
四种进程或线程同步互斥的控制方法
现在流行的进程线程同步互斥的控制机制,其实是由最原始最基本的4种方法实现的。由这4种方法组合优化就有了.Net和java下灵活多变的,编程简便的线程进程控制手段。 这4种方法具体定义如下 在《操作系统教程》ISBN 7-505-69-7 一书中可以找到更加详细的解释 临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 互斥量:为协调共同对一个共享资源的单独原创 2009-05-04 18:53:00 · 556 阅读 · 0 评论 -
关于回调函数
一,回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理、用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函数)有何不同呢?使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用原创 2009-05-04 18:58:00 · 579 阅读 · 0 评论 -
C++提高】成员函数指针
类对象的成员函数有时可以当作一般的 ANSI C 函数一样处理。正如可以声明指向对象数据成员的一般指针一样,也可以声明指向对象成员函数的指针,然后通过该指针间接调用该函数。请看例1: 例1 使用成员函数指针 class Example{ long value; int time; public: long get_value(){retu原创 2009-05-04 18:57:00 · 779 阅读 · 0 评论 -
const的好文
1、什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:)2、为什么引入const? const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。3、cons有什么主要的作用? (1)可以定义const常量,具有不可变性。 例如: const转载 2009-05-04 18:52:00 · 496 阅读 · 0 评论 -
sizeof 解析
解析C语言中的sizeof 一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型 sizeof使用形式:sizeof(type)转载 2009-05-04 18:50:00 · 519 阅读 · 0 评论 -
string转int,double? (C/C++)
// changstring.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include using namespace std;template void convertFromString(T &, const std::string &);template std::string Convert原创 2009-04-27 18:16:00 · 3154 阅读 · 0 评论 -
Log4cxx中多用户的解决方法之一
Log4cxx中多用户的解决方法之一 工程中加入log4cxx.lib,步骤: 1、"项目"->"属性"->"配置属性"->"链接器"->"常规"->"附加库目录",写入"log4cxx.lib"存放的目录 "E:/c++/LOG4CXX/log4cxx-0.10.0-vc6-June2008/msvc6-proj/Release_Shared" 2、"项目"->"属性"->"配置属原创 2009-03-21 13:23:00 · 1670 阅读 · 0 评论 -
Windows API大全
Api函数名 函数说明 WIN16可用 WIN95可用 WINNT可用-------------------------------------------------------------------------------------------------------转载 2009-05-15 13:51:00 · 1509 阅读 · 0 评论 -
VC中使用系统提供的线程池
在项目里经常用到多线程,大量的客户向服务器提出请求,这时需要开辟线程来响应客户请求,由于客户量是不可预知的,难道来一个客户请求就新开个线程来响应吗?答案是否定的,要知道开辟和撤消线程是需要耗费相当多时间和资源的,于是前辈们弄出了很多模型出来解决这种问题,其中使用线程池(Thread Pooling)是个很好的主意。线程池在Windows2000及其以后版本得到了很好的支持。使用系统提供的线程池转载 2009-05-15 13:53:00 · 903 阅读 · 0 评论 -
在VC2008下使用 Log4cxx 配置步骤说明:
第一部分:1、在你的工程目录下创建lib目录:包括apr.lib 、aprutil.lib、log4cxx.lib、xml.lib四个库文件2、在你的工程目录下创建linclude目录:包括Log4cxx的头文件。如include\log4cxx。在代码中引用头文件如 #原创 2011-09-07 13:31:49 · 1348 阅读 · 0 评论 -
禁止MDI子窗口的关闭按钮\MDI中多视排列显示方式
1。修改子窗口的OnClose消息函数,并改为如下代码:void CChildFrame::OnClose() { // 使按Ctrl+F4时,不会关闭窗口。 //CMDIChildWnd::OnClose();}2。添加子窗口的OnCreate消息函数,原创 2011-09-03 12:37:33 · 2649 阅读 · 0 评论 -
怎么把ShockWaveFlash控件上发生的鼠标右键捕获,并替换成鼠标左键事件
forest_wawa (大坏蛋007)http://search.youkuaiyun.com/expert/topic/50/5003/2003/2/16/1432958.htm描述:我在程序里面使用ShockWaveFlash的控件,我需要实现的功能是∶1) 在FLAHS动画的一个按钮上面压下鼠标左键后,执行flash的左键消息响应函数OnFsCommand();2) 在这个按钮上压下鼠标右键后还是要执转载 2009-12-19 23:10:00 · 2171 阅读 · 0 评论 -
多线程中生成随机数序列重复问题的解决方法
使用过随机数的程序员都知道在程序中并不能够实现的真正的完全的随机数函数。随机数函数产生的是通过公式计算出来的一系列伪随机数,这个公式会采用一个种子数计算出一个数,而该数将成为产生下一个数的种子数。基于产生随机数的原理,两次调用随机数后产生的随机数序列将是一样的,显然,这不是我们的期望的结果。为了解决上述问题,使得随机数函数产生的数尽量随机,编程语言通常提供了设定种子数的功能,而一般情况下,程转载 2009-11-13 11:08:00 · 3411 阅读 · 0 评论 -
C++中回调(CallBack)的使用方法
回调函数是一个很有用,也很重要的概念。当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数。回调函数在windows编程使用的场合很多,比如Hook回调函数:MouseProc,GetMsgProc以及EnumWindows,DrawState的回调函数等等,还有很多系统级的回调过程。 一般情况下, 我们使用的回调函数基本都是采用C语言风格. 这里介绍一种C++风格的回调对象方法. 采用t转载 2009-07-14 23:15:00 · 944 阅读 · 0 评论 -
MFC 窗口类的诞生
一、什么是窗口类 在Windows中运行的程序,大多数都有一个或几个可以看得见的窗口,而在这些窗口被创建起来之前,操作系统怎么知道该怎样创建该窗口,以及用户操作该窗口的各种消息交给谁处理呢?所以VC在调用Windows的API(CreateWindow或者CreateWindowEx)创建窗口之前,要求程序员必须定义一个窗口类(不是传统C++意义上的类)来规定所创建该窗口所需要的各种信息,主要原创 2009-09-03 18:20:00 · 983 阅读 · 0 评论 -
GetSafeHwnd
GetSafeHwnd 当我们想得到一个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数,通过下面的例子来看其理由: CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器 HWND hwnd = pwnd->m_hwnd; //得到它的HWND 这样的代码当开始得到的原创 2009-08-28 10:38:00 · 846 阅读 · 0 评论 -
fopen函数
fopen函数用于打开文件, 其调用格式为: FILE *fopen(char *filename, *type); 在介绍这个函数之;前, 先了解一下下面的知识。 (1) 流(stream)和文件(file) 流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设 备之间提供了一层抽象的东西, 称之为"流", 而将具体的实际设转载 2009-08-28 09:12:00 · 1795 阅读 · 0 评论 -
Debug和Release之本质区别的讨论(转)
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错转载 2009-06-17 14:07:00 · 668 阅读 · 0 评论 -
char,wchar_t,TCHAR 3者的区别与联系
2. UNICODE WCHAR*到 char * CString str(wchar*);///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////LPCSTR 32-bit 指针,指向一个常量原创 2009-05-29 14:21:00 · 1902 阅读 · 0 评论 -
一个ASCII到UTF8的类
1.采用类方式class a2w{ wchar_t* buffer; public: explicit a2w(const char* str):buffer(0) { if(str) { size_t nu = strlen(str); size_t n = ::MultiByteToWideChar(CP_AC原创 2009-05-29 15:04:00 · 850 阅读 · 0 评论 -
log4cxx多用户的真正解决 配制与代码
配制文件 log4cxx.properties# 设置root logger为DEBUG级别,使用了ca,fa,err三个Appender#设置spirit为ERROR级别,继承rootLogger的Appenderlog4j.logger.err=DEBUG,errlog4j.additivity.err=falselog4j.logger.info=DEBUG,infolog4j.add原创 2009-05-26 10:11:00 · 1922 阅读 · 0 评论 -
vc8+ACE5.5 安装心得
网上的一些文章对于ACE的安装很详细,但也很千篇一律。实践中你会遇到很多问题,但网上解决办法比较少。为此写了这篇文章,分享之。 由于VC6.0对c++标准支持的不好,所以编译ACE,虽然不会报错,但编译出来的DLL,LIB使用会出现stl的问题,所以第二次编译我选择了VC8,推荐使用。 1. 进入D:/ACE/ACE_wrappers/ace目录 ,然后就是新建 config.原创 2009-05-25 11:33:00 · 2392 阅读 · 0 评论 -
const用法详解
法详解 面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的#define 以下几点很重要,学不好后果也也很严重 const 1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j; //非法,导致编译错误 j=i; //合法 2. 必须初始化 const int i=5;转载 2009-05-21 08:50:00 · 538 阅读 · 0 评论 -
通过HTTP协议利用VC++ POST通信开发
CString strDescript=""; CString strContent=""; CString strPara = "ob5YbWxUeHShvw=="; // 需要提交的数据 username=13805083579&password=a307953 PostContent("http://127.0.0.1:8080",strPara,strContent,st原创 2009-05-19 10:32:00 · 4661 阅读 · 0 评论 -
CMainFrame类的4个主要成员函数小结及CMainFrame类的应用
如说有一个CDialog类型的类CDlg,如何在这个类中修改CMainframe中成员变量的值?先谢过了.CMainFrame * pMf = (CMainFrame*)AfxGetMainWnd(); pMf->变量 = ...; 在你的Dlg的cpp文件中包含mainfrm.h获得CMainFrame: -在CMinApp中用AfxGetMainWnd()或者m_pMainWnd -在原创 2008-12-24 09:13:00 · 3388 阅读 · 0 评论 -
CListCtrl 使用的小结
m_list.DeleteAllItems();//删除所有列表项 m_list.InsertItem(0,"数学");//添加新行 m_list.SetItemText(0,1,"80"); m_list.SetItemText(0,2,"必修"); m_list.InsertItem(1,"物理");//添加新行 m_list.SetItemText(1,1,"原创 2008-12-19 15:40:00 · 610 阅读 · 0 评论 -
程序打开与关闭
我用这个WinExec("cmd .exe /k lj.bat >>c://a.txt",SW_HIDE);打开的 cmd.exe, HWND hwnd = ::FindWindow(NULL,"C://WINDOWS//system32//cmd.exe"); //::DestroyWindow(hwnd); ::SendMessage(hwnd,WM_CLOSE,0,0);原创 2008-12-17 22:10:00 · 696 阅读 · 0 评论 -
dialog中使用toolbar
dialog中使用toolbar 闻怡洋 译 homepage: http://vchelp.zb169.net mfc中没有提供供对话框使用的工具条类,而我们时常需要开发以对话框为框架的程序。下面我使用简单的代码说明这种方法。 step1: 在资源编辑器中插入工具条资源,并为每个按钮创建id。将它命名为idc_toolbar1 step2: 在对话框变量中添加一个工具条变量。 c原创 2008-11-05 11:53:00 · 817 阅读 · 0 评论 -
VC2005格式化代码的快捷键
在VC2005中,快捷键是Ctrl + K, Ctrl + F, 这是一个组合键,即先按Ctrl + K, 这时候编辑器会等待下一个按键动作,此时再按Ctrl + F, 即可以格式化代码了,当然,也可以在选项里面设置成使用VC6的快捷键,就可以继续使用Alt + F8了也有 Visual Studio 2005的,下面的快捷键符合IDE默认的键盘映射方案,如果需要更改“工具”——“选项” ——原创 2008-10-31 15:37:00 · 2266 阅读 · 0 评论 -
CString和char*互相转换
char* TempPackBytes = new char[TempPackLen]; memset(TempPackBytes, 0, sizeof(char)*TempPackLen ); for (int i = 0; i { char a=Totalbytes[i + DataHeadLen]; TempPackBytes[i] = Totalbytes[i原创 2008-10-30 10:52:00 · 726 阅读 · 0 评论 -
Clistctrl自动下滚
pList.EnsureVisible(nRow,true);转载 2008-10-30 17:35:00 · 976 阅读 · 0 评论