windows
lijianli9
这个作者很懒,什么都没留下…
展开
-
替换应用程序exe图标
<br />替换应用程序exe图标,主要使用的API函数是BeginUpdateResource(),UpdateResource(),EndUpdateResource()来使用自定义的ico文件类替换exe程序原来的图标。<br />view plaincopy to clipboardprint?<br />// 第一个参数是将要替换图标的exe文件路径,第二个参数是替换的ico文件路径 <br />void ReplaceExeIco(LPCTSTR lpszApp, LPCTSTR lpszI转载 2011-05-18 21:20:00 · 1701 阅读 · 0 评论 -
双网卡下使用udp带来的问题
今天在工程人员现场布置程序时,出了一个疑难问题,客户端发送的UDP包服务程序能收到,但是服务程序收到的包的ip地址很随机,造成在生成唯一ID的时候出现问题,经过仔细排查,终于发现是双网卡的问题。因为在绑定socket时并没有指定IP(客户端上是双网卡),客户端发送UDP包时,没有指定使用哪个网卡,造成了终端收不到的包的ip地址不固定,所以使用UDP时如果不能肯定是单网卡,一定要绑定IP。(可以原创 2013-03-07 14:25:15 · 12089 阅读 · 3 评论 -
loadlibrary加载三方dll失败问题。
前几天,在联网测试三方的dll,但是出现dll放到exe目录下面可以正常加载,如果单独放一个目录却出现126错误代码,找不到指定的模块。 由于三方dll使用zlib版本和exe使用的zlib版本不同,所以三方的dll又不能放到exe目录中,必须单独新建目录。于是在网上搜索得到以下解决方案:方式一 采用LoadLibraryEx若DLL不在调用方的同一目录下,可以用LoadLibrary原创 2013-06-14 08:39:51 · 8217 阅读 · 0 评论 -
解决DllMain中创建对话框的问题
昨天,在一个已有的模块(导出类的方式)中添加界面资源功能,考虑到界面的创建和显示,于是就在dllmain中 PROCESS_ATTACH中创建资源界面,结果这个模块一加载,就报错了,是afxwin2.inl 22行错误,打开mfc的源码一看,说是找不到资源模块,仔细考虑了下,由于主模块和dll资源需要切换,想使用切换的方式,怕对exe造成影响,于是自己就由封装了一个dll,在这个dll中创原创 2013-06-18 09:05:15 · 961 阅读 · 1 评论 -
多线程传参问题
MFC中使用多线程比较简单,大家都推荐用AfxBeginThread来实现,但使用过程中确遇到传入this之后不能得到对象内部字段数据的问题。一:问题Test.hclass CTest{public: CTest(void); ~CTest(void); void ThreadMethod(HWND hWnd); HW原创 2013-06-18 21:51:23 · 1098 阅读 · 0 评论 -
VC中创建线程分析
1、CreateThread、_beginthreadex、AfxBeginThread的区别和正确使用:CreateThread是一个Windows 的API函数,_beginthreadex是一个微软VC中C运行时库中的线程创建函数,AfxBeginThread则是MFC中的线程创建函数。其依赖关系为:CreateThread CreateThread _beginth转载 2013-07-16 07:09:11 · 734 阅读 · 0 评论 -
C/C++程序员必须熟练应用的开源项目
作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对于自己来说, 在不同的项目中应用, 只需要复制代码, 改改也就可以了, 因为自己写的代码自己很熟悉。转载 2013-07-15 19:04:29 · 655 阅读 · 0 评论 -
使用VC库函数中的快速排序函数
上一篇讲了快速排序的实现。但在很多场合,直接使用快速排序的库函数是很方便的。下面讲下VC中库函数qsort()的用法:函数原型:void qsort(void *base,size_t num,size_t width, int (__cdecl *compare )(const void *, const void *) );第一个是数组地址,第二是数组大小,第三个是数组中每个元转载 2013-07-20 09:44:41 · 550 阅读 · 0 评论 -
线程学习
开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上,要求输出结果必须按ABC的顺序显示:ABCABC #include "stdafx.h"#include #include const int CHILDTHREADLOOP = 5;const int PARENTTHREADLOOP = 10;const int TOTALLOOP原创 2013-07-21 10:17:07 · 909 阅读 · 0 评论 -
线程学习2
子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环10 次(线程面试:windows下实现) #include "stdafx.h"#include #include const int CHILDTHREADLOOP = 5;const int PARENTTHREADLOOP = 10;const int TOTALLOOP = 5;原创 2013-07-21 10:18:05 · 759 阅读 · 0 评论 -
线程学习3
有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:A:1 2 3 4 1 2....B:2 3 4 1 2 3....C:3 4 1 2 3 4....D:4 1 2 3 4 1....请设计程序。#include "stdafx.h"#include #include原创 2013-07-21 10:20:22 · 757 阅读 · 0 评论 -
SQL Server 2008过期导致MSSQLSERVER服务无法启动 报错17051
现象:安装的是SQL Server 2008评估版,180天的试用期后,MSSQLSERVER服务就无法启动,手动启动就报告17051错误。解决办法:第一步:进入SQL2008配置工具中的安装中心,第二步:再进入维护界面,选择版本升级,第三步:进入产品密钥,输入密钥Developer: PTTFM-X467G-P7RH2-3Q6CG-4DMYBEnt转载 2013-08-27 21:41:00 · 15660 阅读 · 6 评论 -
mktime timecore.cpp 40 ctime
VC6 dlg 工程 m_time 类型是 CDateTimeCtrlint nyear= 2099; int nmonth=12; int nday=31; COleDateTime tDj3(nyear,nmonth,nday,0,0,0); m_time.SetTime(tDj3);可以正常运行VC6原创 2013-10-29 13:59:46 · 1147 阅读 · 0 评论 -
win7(旗舰版)VC添加控件显示不支持此接口
我的系统是win7(旗舰版),想自己用VC体验一下上位机,但在按照添加控件的步骤做时遇到了一个这样的问题,那个Microsoft Communications Control, version 6.0就是添加不进去,老是显示不支持此接口。在别人的电脑上用xp时就没问题,难道这是系统的问题吗?还是电脑的问题呢?寻求各位指点下 解决方法:microsoft communicat转载 2013-11-18 14:07:10 · 2201 阅读 · 0 评论 -
dll的概念、dll导出类(转)
1、 DLL的概念DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。这些可以直接拿来使用。静态链接库与动态链接库的区别: (1)静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含在最终生成的EXE文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸转载 2015-01-28 10:07:12 · 594 阅读 · 0 评论 -
转: 函数的线程安全和可重入
摘自:http://liuaigui.blog.sohu.com/86494742.html线程安全的(Thread-Safe):如果一个函数在同一时刻可以被多个线程安全地调用,就称该函数是线程安全的。线程安全函数解决多个线程调用函数时访问共享资源的冲突问题。可重入(Reentrant):函数可以由多于一个线程并发使用,而不必担心数据错误。可重入函数可以在任意时刻被中断,稍后再转载 2013-02-21 15:04:01 · 633 阅读 · 0 评论 -
关于几种多线程模型的探讨
a.半同步/半异步模型,这个模型使用太广泛,即一个线程处理所有网络事件,多个逻辑线程处理业务逻辑,通过排队层进行消息交换。b.领导者/追随者模型,线程既是领导者又可追随者,忙线程和空闲线程进行切换,典型如ACE_TP_Reactor/boost::asio(多线程执行io_service::run)。c.级联方式,一个线程一个epoll,每个线程管理自己的fd集合,选择策略(比如轮询)转载 2013-01-22 19:48:30 · 741 阅读 · 0 评论 -
网络编程之nagle算法和TCP_NODELAY
<br />现在大概明白,是由于nagle算法在捣乱。<br />TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。<br />Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。<br />Nagle算法的基本定义是任意时刻,最多只能有一个未被确认的小段。 所谓“小转载 2011-05-17 20:53:00 · 590 阅读 · 0 评论 -
关于模态/非模态对话框不响应菜单的UPDATE_COMMAND_UI消息
<br /> <br />对于模态非模态对话框默认是不响应菜单的UPDATE_COMMAND_UI消息的,需要增加对WM_INITMENUPOPUP消息的处理以后,才可以响应UPDATE_COMMAND_UI。<br />void CXXXDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)<br />{<br /> CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu)转载 2011-05-18 21:06:00 · 524 阅读 · 0 评论 -
MFC的GUI窗口使用Console输出函数printf
<br />#include <io.h> <br />#include <fcntl.h> <br /> <br />void InitConsole() <br />{ <br /> int nRet= 0; <br /> FILE* fp; <br /> AllocConsole(); <br /> nRet= _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT); <b转载 2011-05-18 21:12:00 · 1090 阅读 · 0 评论 -
网络编程之nagle算法和TCP_NODELAY
<br />现在大概明白,是由于nagle算法在捣乱。<br />TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。<br />Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。<br />Nagle算法的基本定义是任意时刻,最多只能有一个未被确认的小段。 所谓“小转载 2011-05-17 20:51:00 · 467 阅读 · 0 评论 -
获取CMD命令结果 收藏
<br />UINT __cdecl ThreadProc(LPVOID lParam) <br />{ <br /> HWND hWnd = (HWND)lParam; <br /> ASSERT(hWnd); <br /> <br /> TCHAR szApp[MAX_PATH] = _T("netstat -s"); <br /> HANDLE hRead = NULL; <br /> HANDLE hWrite = NULL; <转载 2011-05-18 20:41:00 · 693 阅读 · 0 评论 -
C++是如何利用虚函数实现多态性的?
还是先看示例程序,用代码说话:#include iostream>using namespace std; class A{public:inline virtual void vfun(){cout "this is vfun in class A" }}; class B : public A{public:inline void转载 2011-06-05 22:15:00 · 816 阅读 · 0 评论 -
怎样获得虚函数指针
#include using namespace std; class A { private: int a; int b; public: virtual void vfun0() { cout转载 2011-06-05 22:20:00 · 758 阅读 · 0 评论 -
关于函数返回值的几种情况
在一个函数的内部,return的时候返回的都是一个拷贝,不管是变量、对象还是指针都是返回拷贝,但是这个拷贝是浅拷贝。 1. 如果返回一个基本类型的变量,比如:int a;a = 5;return a; 那么就会a的一个拷贝,即5返回,然后a就被销毁了。尽管a被销毁了,但它的副本5还是成功地返回了,所以这样做没有问题。 2. 但是对于非动态分配(new/mallo转载 2011-06-05 21:52:00 · 549 阅读 · 0 评论 -
windows 多线程编程的几点经验 (防止死锁)
) 不要在线程函数体内操作MFC控件,不要再线程里面调用UpdateData函数更新用户界面,而应该尽量采用发送消息的方式,在主线程的消息响应函数中操作控件;2)不建议采用SendMessage往主线程发送消息,因为它是同步的,阻塞的,可以考虑采用PostMessage代替;转载 2011-08-10 09:14:23 · 453 阅读 · 0 评论 -
Socket API,CAsyncSocket,CSocket内幕及其用法
Socket有同步阻塞方式和异步非阻塞方式两种使用,事实上同步和异步在我们编程的生涯中可能遇到了很多,而Socket也没什么特别。虽然同步好用,不费劲,但不能满足一些应用场合,其效率也很低。 也许初涉编程的人不能理解“同步(或阻塞)”和“异步(或非阻塞)”,其实简单两句话就能讲清楚,同步和异步往往都是针对一个函数来说的,“同步”就是函数直到其要执行的功能全部完成时才返回,而“异步”则是,转载 2011-11-18 16:51:54 · 784 阅读 · 0 评论 -
解决WIN7下VC6“打开”和“添加文件至工作区”崩溃问题
在win7下VC++ 6.0中点击File-Open(文件-打开)或者点击工具栏上的Open按钮就会出现程序直接崩溃,点击Project-Add File To Project(项目-添加文件到项目)也会出现这种情况!为什么会出现这个情况呢?微软的回答:访问冲突 (0xC0000005) 在 0x5003eaed DEVSHL.DLL 中。DevShl.Dll 引用在 0×0000000转载 2011-11-02 12:58:15 · 3882 阅读 · 0 评论 -
socket10053发送数据出现错误
前几天初步解决了困扰许久的socket10053的问题。 现象如下:windows下开发多线程socket通信的系统(采用事件选择WSAEventSelect的方式),在高并发的情况下send及recv时经常出错(有时是收到错误码不为0的FD_CLOSE事件),错误码为10053。 解决过程:首先看了MSDN,对10053的解释是“软件主动放弃一个连转载 2013-01-25 16:14:10 · 8743 阅读 · 2 评论 -
从缓冲上看阻塞与非阻塞socket在发送接收上的区别
最近在网络上看到一些帖子以及回复,同时又搜索了一些网络上关于阻塞非阻塞区别的描述,发现很多人在描述两者的发送接收时操作返回以及缓冲区处理的区别时有不同程度的误解。所以我想写一篇文章来纠正错误,并作为记录方便查阅,如有转载,注明作者(jwybobo2007)以及出处即可。 首先socket在默认情况下是阻塞状态的(未指异步操作以及其它一些特殊用途下,直接默认为非阻塞),这就使得发送以及接收转载 2013-02-01 10:33:59 · 710 阅读 · 0 评论 -
socket error 10053,10054究竟是怎么引起的
贴2段能稳定重现10053的代码,下面是客户端: WORD VersionRequested; WSADATA WsaData; VersionRequested = MAKEWORD(2, 2); if (WSAStartup(VersionRequested, &WsaData)) return -1; SOCKET SocketServer = socket转载 2013-01-31 09:59:03 · 40817 阅读 · 1 评论 -
滴水穿石 同一台电脑启动两个或多个tomcat
今天要在机子的tomcat上部署新的项目,需要访问的端口为80,与之前不同。但要求不能更改原tomcat部署项目的端口,因为该tomcat内的项目正在对外使用中,且不能断开服务器。那么,我就需要再向该服务器放置一个新的tomcat,把链接http的端口设为80,并将8005、8009也改为了不常用的端口在我启动这个tomcat时,浏览器无法显示小猫。在我转载 2016-08-14 22:08:24 · 336 阅读 · 0 评论