C++
andy_youyou
用心做事
展开
-
BCGControlBar_CBCGPTabWnd 控件
切换TAB页,需要添加一个消息函数afx_msg LRESULT OnChangeActiveTab(WPARAM wp, LPARAM lp);在父类中将消息ID 和消息函数映射ON_REGISTERED_MESSAGE(BCGM_CHANGE_ACTIVE_TAB, OnChangeActiveTab)通过消息切换TAB页:向CBCGPTabWnd的父类发送消息PostMess...原创 2019-09-03 22:39:42 · 1085 阅读 · 0 评论 -
jrtplib的编译问题
在vc6下编译jrtplib,但编译example1.cpp时产生了很多错误,有以下几种情况:1) Use Run-time Library的设置一定要统一。 2) VC产生的workspace的debug setting,默认有个GZ选项, Catch Release-Build Errors in Debug Build,编译的时候 会说error LNK2001: unre转载 2010-04-15 18:41:00 · 1193 阅读 · 0 评论 -
unresolved external symbol _WinMain@16 ||and|| 1 unresolved externals
太郁闷了!!!学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难。 初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为: unres转载 2010-04-15 18:26:00 · 605 阅读 · 0 评论 -
malloc/free与new/delete
malloc/free:不会主动调用对象的构造和析构函数,C语言只能用malloc/free管理动态内存。new/delete:会主动调用对象的构造和析构函数。对于内部的数据类型(int char....)没有构造和析构的过程,对他们而言malloc/free和new/delete是等价的如果在申请动态内存时找不到足够大的内存块,malloc和new将返回null指针,告知内存申请失败原创 2009-12-15 18:52:00 · 475 阅读 · 0 评论 -
包含WSAOVERLAPPED的自定义结构
完成端口中包含WSAOVERLAPPED的自定义结构struct IOCP_IO{ WSAOVERLAPPED ol; // 如果用完成端口 自定义结构中第一个参数必须是它,每次投递WSARecv或WSASend时都要初始化该变量 WSABUF wsaBuf; //一次投递接收的数据内容和长度 int ptr; //数据索引接收到第几个字节 IOCP_KEY_PTR iocp_k原创 2009-12-04 16:35:00 · 3935 阅读 · 0 评论 -
IOCP的内存管理
前言: 错误处理和socket释放, 是IOCP编程中的一大难点. 本文试图就IOCP设计中经常遇到的这个难题展开论述并寻找其解决方案, 事实上, 文中所述的解决方式不仅仅适用于IOCP, 它同样适用于EPOLL等多种服务器编程的网络模型中, 前提是: 领会这种处理方式的实质.正文:在使用IOCP开发时, 大家经常遇到的一个难题是与socket相关的缓冲区释放不当带来的错误, 这种错误通常是由转载 2009-12-03 10:25:00 · 1702 阅读 · 0 评论 -
IOCP的几点开发心得
IOCP以其高效的性能受到服务器开发者的青睐,本人有幸在当前的项目中使用了该异步模型,修改调试之余,总结出开发过程中的经验若干,供大家借鉴。 首先是需要注意的是OVERLAPPED结构。想必该结构大多数人都是自定义新的结构体,将OVERLAPPED成员放置在第一位,然后后置其他成员。 在函数 WSASend, WSARecv, PostQueuedCompletionStatus 以及Ge转载 2009-12-02 09:55:00 · 1373 阅读 · 1 评论 -
c++ 遍历目录查找文件
/////////////////////////////////////////////////////////// // Get current dir of exe char szModuleFileName[MAX_PATH]; //得到exe所在的路径包括exe文件 ::GetModuleFileName(NULL, szModuleFileName, MAX_PAT原创 2010-01-27 13:42:00 · 1643 阅读 · 0 评论 -
WIN SOCKET 几个方法解释的小结
WSASocket()简述:创建一个与指定传送服务提供者捆绑的套接口,可选地创建和/或加入一个套接口组。 #include SOCKET WSAAPI WSASocket ( int af, int type, int protocol, LPPROTOCOL_INFO lpProtocolInfo, Group g,转载 2009-12-02 10:28:00 · 2150 阅读 · 0 评论 -
windbg使用
1 调试DUMP文件的前提 a:加入符号文件 如 C:/WINDOWS/Symbols;D:/scb (pdb文件和exe文件)和系统文件 b:加入源代码目录 如 E:/myworks/code/辽宁发电管理SCB/MssSCBMain c:打开DUMP文件2具体调试 在CMD中录入 !analyze -v 该命令用来分析出错的情况 .ecxr:该命令可以将出错时的源代码和堆栈的使用情况原创 2010-05-17 13:40:00 · 635 阅读 · 0 评论 -
Use run-time library 设置问题
使用库时常出现的错误, 提示: 基本是库和程序选择的run-time ibrary不同引起的.LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit already defined in MSVCRTD.lib (MSVCR80D.dll)LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit alr转载 2010-05-21 15:23:00 · 4423 阅读 · 0 评论 -
c++项目包含c头文件 .c文件时的编译
.c文件编译处理:右击.c文件选择properties->precompiled Header->create/use原创 2014-02-25 22:36:41 · 2229 阅读 · 0 评论 -
PostMessage与SendMessage的迥异
在做基于窗口的windows程序的时候,我们避免不了要向窗口发送消息,有两种方式,一种是PostMessage,另外一种是SendMessage。关于这两个宏,我也是搞了好久才彻底搞明白。。。而搞明白的前提就是狠狠的看MSDN,那里讲的才是最权威的。1、PostMessage会将消息压入窗口所在线程的消息队列,然后立即返回;而SendMessage则不经过消息队列,SendMessage可认为转载 2012-08-20 15:09:53 · 929 阅读 · 0 评论 -
关于多线程中使用SendMessage
如果,窗口是由非主线程创建的,那么,那个线程将会跑一个自己的窗口消息队列。调用SendMessage会切换到该线程上去执行。主线程是个窗口线程,在另外一个工作线程中调用了窗口线程的SendMessage,那么执行的过程是:1.工作线程挂起2.切换到窗口线程,执行对应的消息处理3.切换回工作线程SendMessage : 如果指定窗口由调用线程创建,那么窗口过程会被当成一转载 2012-08-20 14:58:05 · 7795 阅读 · 0 评论 -
内存对齐
本文摘抄自:http://www.cppblog.com/deercoder/archive/2011/03/13/141717.aspx原创 2011-03-14 17:24:00 · 876 阅读 · 0 评论 -
主线程要执行一个复杂的操作还要响应界面操作
主线程要执行一个复杂的操作还要响应界面操作的解决方法原创 2011-01-04 16:45:00 · 747 阅读 · 0 评论 -
模板的find_if 与 for_each
stl的find_if 与 for_each的应用原创 2010-09-27 09:59:00 · 758 阅读 · 0 评论 -
指定月的第一天和最后一天
得到指定日期的所在月的第一天和最后一天原创 2010-08-30 17:01:00 · 642 阅读 · 0 评论 -
SOCKET网络通讯部分的开发流程
1:服务器端:监听就可以,有客户端连接时new一个客户端,客户端断开时Delete这个客户端2:客户端:连接超时定时器:一般连接超时定时器不论超时还是连接成功都只执行一次。心跳解决的问题:TCP连接已经断开 但是应用层还是连接状态,TCPVIEW中查看也是连接状态,利用心跳机制如果在某个时间段内没有收到心跳就证明链路断开,就执行断开重连操作发送心跳定时器:定时向服务器端发送心跳CM原创 2009-12-01 11:52:00 · 722 阅读 · 0 评论 -
C++变量命名规范
C++变量命名规范 a Array 数组b BOOL (int) 布尔(整数)by Unsigned Char (Byte) 无符号字符(字节)c Char 字符(字节)cb Count转载 2009-11-10 11:27:00 · 760 阅读 · 0 评论 -
从STL中的list删除元素
正确版本:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 #include iostream> 2 #include list> 3 #include algorithm> 4 using namespace std; 5 6 int转载 2009-10-31 11:24:00 · 1838 阅读 · 0 评论 -
ATL容器之map
MAP是键值对应的控件在使用之前必须先包含定义 :mapm_map;mapm_map1;等等添加项:m_map.insert(pair(i,"项1")); m_map[i]=“项1”;//向MAP添加数据的两种方法查找项: map::iterator it ;//基站名称迭代器it=m_map.find(1);//查找键值为1的数据项if(it!=m_map原创 2009-08-03 16:43:00 · 2141 阅读 · 0 评论 -
c++中CTime和CString之间的互转
字符串转时间:CString csStopTime = pList->GetItemText(nItem, 1/*基站停电起始时间*/);COleDateTime dt; dt.ParseDateTime(csStopTime); SYSTEMTIME st; dt.GetAsSystemTime(st); CTime tm(st);CTime tm1 =CTime::原创 2009-08-03 16:40:00 · 1020 阅读 · 0 评论 -
setdll.exe的使用
将setdll拷贝到exe文件所在的目录打开dos界面定位到该目录下录入setdll /d:file.dll file.exe 将dll附加到exe文件中在dll 中就可以操作exe的部分功能了例如HWND hwndMainAppWnd = ::FindWindow("APPclassname", NULL); if (hwndMainAppWnd) ::EnumChildWi原创 2009-08-04 09:39:00 · 3486 阅读 · 3 评论 -
“cannot access the ClassView information file.”的解决办法
1.关闭工程2.删除工程下.clw .ncb 文件及/debug目录,3.重建工程build all文件作用:.dsp 工程文件,文本格式,不可丢失或损坏.dsw 工作区文件,丢失或损坏时,可点击.dsp文件打开工程,.dsw文件自动重建.clw ClassWizard信息文件,ini格式,ClassWizard出问题时可删除它再重建.map 映像信息文件,编制DLL写.def原创 2009-08-04 11:12:00 · 7225 阅读 · 1 评论 -
struct 对齐问题
struct aa{int a;char b;}sizeof(aa)得到的是8而不是5因为结构在内存中的存储是按照最大的那个类型为单位的,int 占4个字节,对应的b也是4个字节所以统计出来是长度是8 #pragma pack(push) //将包压栈#pragma pack(1)//把本结构的单位设定成1bytestruct aa{ int b; char原创 2009-04-02 15:52:00 · 472 阅读 · 0 评论 -
ProcessShellCommand(cmdInfo)函数功能
ProcessShellCommand()本文链接:http://user.qzone.qq.com/278288976/blog/1196240170 ProcessShellCommand()在我们用向导创建MFC应用程序时,在App::InitInstance()中总会出现下面这样的代码到底是什么意思呢,我差了很多资料终于使其漏出庐山真面目。 CC转载 2008-12-31 09:35:00 · 18731 阅读 · 3 评论 -
MFC之subclass
SubClass Dialog 上面的一个控件呀! SubClass 某个控件后,其原来的 WindowProc 替换成你自己写的 CYourCWndClass 的 WindowProc,这样你就可以处理这个控件的所有消息了;用 ClassWizard 维护自己的 CYourCWndClass 就可以了。在MFC中除了SubClassDlgItem外还有Subclas转载 2008-12-30 08:41:00 · 2281 阅读 · 0 评论 -
c++通过存储过程访问数据库库(ado)
_ConnectionPtr m_pConnection ; CString m_dbserver= "127.0.0.1"; CString m_initDb = "PhoneManage"; CString m_username = "sa"; CString m_passwd = ""; CString strConnection = "Provider=SQLOLEDB.1;Da原创 2008-10-21 17:32:00 · 1380 阅读 · 0 评论 -
map删除元素注意,在例三上栽了一次
在STL(标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在STL中删除容器有很多陷阱,网上也有不少网友提到如何在STL中安全删除元素这些问题。上一篇文章主要讨论序列式容器vector、list中安全删除元素的方法和可能会遇到的陷阱,这一次讨论在map(multimap)容器中如何安全的删除和插入元素。map(multimap)容器为关转载 2009-08-06 13:19:00 · 3816 阅读 · 0 评论 -
在一个对话框中访问另一个对话框的变量
HWND mHwnd = ::FindWindow(NULL,"dlgok");//通过windowname得到该窗体的句柄 DlgOk* mDlgok= (DlgOk*)CWnd::FromHandle(mHwnd ); //有该句柄得到对话框类的指针 int ntemp= mDlgok->m_temp; //访问其中的变量原创 2009-09-16 13:24:00 · 728 阅读 · 0 评论 -
P2P之UDP穿透NAT的原理与实现
论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码)。呵呵,在这里我就用自己实现的一个源代码来说明UDP穿越NAT的原理。首先先介绍一些基本概念: NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。NAT分为两大类,基本的NAT和NAPT(Networ转载 2009-10-23 15:13:00 · 498 阅读 · 0 评论 -
Windows I/O完成端口
WINDOWS完成端口编程1、基本概念2、WINDOWS完成端口的特点3、完成端口(Completion Ports )相关数据结构和创建4、完成端口线程的工作原理5、Windows完成端口的实例代码WINDOWS完成端口编程 摘要:开发网络程序从来都不是一件容易的事情,尽管只需要遵守很少的一些规则:创建socket,发起连接,接受连接,发送和接收数据,等等。真正的困难在于:让你的程序可以转载 2009-10-22 11:53:00 · 996 阅读 · 0 评论 -
C++的static关键字
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1#include转载 2009-09-25 14:55:00 · 586 阅读 · 0 评论 -
CString与Byte数组的相互转化
CString cs1 = "gettruckpos"; byte buf[200]; memcpy(buf,cs1.GetBuffer(cs1.GetLength()),cs1.GetLength()); //将cstring放入byte数组 CString *pPhoneNum =new CString((char*)buf, cs1.GetLength()); //将byte原创 2009-09-30 09:20:00 · 30592 阅读 · 1 评论 -
线程类,线程函数的终止
正确终止线程的方法终止线程类//向线程发退出消息,线程类对象执行ExitInstance()在该函数中删除自己申请的堆栈if(m_PwroffInfoRecvThread!=NULL) m_PwroffInfoRecvThread->PostThreadMessage(WM_QUIT,0,0);//当线程退出时m_PwroffInfoRecvThread->m_hThread是有信号状态//如果1原创 2009-09-17 16:21:00 · 4296 阅读 · 0 评论 -
static作用域造成一则小问题
成员函数的作用域是类域, 而在类体外加上static不是表示静态函数,表示的是函数拥有文件域(file scope) 而类域是小于文件域,强行把类域扩大到文件域,就会出错。 如下代码: class CA { public: static void display(void); }; static void CA::display(void) { // ERROR! cout } int m原创 2009-09-17 11:34:00 · 805 阅读 · 0 评论 -
关于CEvent
如果CEvent对象为自动事件,则当WaitForSingleObject(hHandle,INFINITE)返回时,自动把Cevent对象重置为无信号状态。CEvent::SetEvent()把对象设置为有信号状态,释放等待的线程,使得等待线程得以运行Cevent::ReSetEvent()把对象设置为无信号状态,程序在WaitForSignleObject(hHandle,INFINITE)处原创 2009-09-17 11:32:00 · 844 阅读 · 0 评论 -
平时总结
cstring 与 byte数组之间的相互转换 byBuf 是一个BYTE数组字节数组转字符串byte PhoneNumLen = byBuf[7];memcpy(Temp1, byBuf+8, PhoneNumLen); //电话号码长度CString *pTmep =new CString((char*)Temp1, PhoneNumLen);//电话号码内容csPhoneNum = *pTm原创 2009-09-15 17:34:00 · 622 阅读 · 0 评论 -
c++学习过程中积累的知识点
BYTE AA[2]转换成ussign short类型的时候是 AA[1]在高字节。AA[0]在低字节BYTE AA[4]可以直接转换成float类型。函数CreateEvent(NULL, FALSE, TRUE, NULL)中 参数一:NULL表示默认的安全级别。 参数二:如果想在每次调用WaitForSingleObject 后让WINDOWS为您自动地把事件地状态恢复为”无信原创 2008-09-26 08:59:00 · 548 阅读 · 0 评论