代码改变世界

随笔分类 -  MFC/VC++

C++ 定时器使用

2013-01-26 19:45 by java20130722, 478 阅读, 收藏,
摘要: 用WM_TIMER来设置定时器先请看SetTimer这个API函数的原型UINT_PTR SetTimer( HWND hWnd, // 窗口句柄 UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器 UINT uElapse, // 时间间隔,单位为毫秒 TIMERPROC lpTimerFunc // 回调函数 ); 例如SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了,例如:UIN... 阅读全文

Chapter11-"windows线程池"之异步调用函数

2013-01-26 15:18 by java20130722, 273 阅读, 收藏,
摘要: 利用线程池(thread pool)异步调用函数时,不需显式调用 CreateThread 函数,系统会为进程自动创建线程池(thread pool)。线程池的每个线程实际运行你事先定义好的回调函数。 写到这里,也许大多人会想:怎么不直接调用众所周知的 CreateThread 函数去创建线程?这里就有必要讲一下线程池(thread pool)的机制了。 线程池(thread pool)的线程在执行完后不是立即销毁的(CreateThread创建的线程执行完成以后就销毁了),而是再次进入线程池(thread pool),等待进程请求该线程的再次执行。线程池的这种机制使得在需要创建许多线... 阅读全文

VS中Debug版本和Release版本的区别

2012-12-21 21:26 by java20130722, 403 阅读, 收藏,
摘要: Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此不讨论)Debug 版本参数含义/MDd /MLd 或 /MTd 使用 Debug runtime library (调试版本的运行时刻函数库)/Od 关闭优化开关 /D "_DEBUG&quo 阅读全文

CloseHandle()函数的使用

2012-12-21 16:48 by java20130722, 593 阅读, 收藏,
摘要: CloseHandle()函数的使用很多程序在创建线程都这样写的:............ThreadHandle = CreateThread(NULL,0,.....);CloseHandel(ThreadHandle );。。。。。这不是刚好创建又关闭了吗?线程怎么运行呢?答:Closing a thread handle does not terminatethe associated thread. To remove a thread object, you must terminate thethread, then close all handles to the thread 阅读全文

#pragma 指令

2012-06-19 09:57 by java20130722, 356 阅读, 收藏,
摘要: 参考网页:http://hi.baidu.com/dreamzgj/blog/item/46b99b12812cce24dd5401ee.htmlhttp://jinweijingjing.blog.sohu.com/30362134.htmlhttp://msdn.microsoft.com/zh-cn/subscriptions/downloads/d9x1s805(v=vs.80).aspx在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的 阅读全文

MFC中利用CSocket实现UDP通信

2012-05-09 17:51 by java20130722, 5399 阅读, 收藏,
摘要: 这两天一直在找MFC下用CSocket实现UDP通信,尝试了网上不少的资料都没有成功,可能是自己在什么地方出错了。最后参考http://www.cnblogs.com/nuaa/archive/2011/12/22/2298495.html顺利实现了。自己也顺便作一些总结,希望可以利人利己。 源代码请到此处下载。基本界面如下: UDP通信时双方地位是对等的,不用像TCP那样要在服务器端设置一个监听Socket。 第一步:调用Create函数在本机上创建一个Socket。 实例中用到:m_pSocket->Create(m_localPortNum,... 阅读全文

如何调用 DLL 中的C++ 类(隐式链接)

2012-05-08 12:19 by java20130722, 348 阅读, 收藏,
摘要: 如何调用DLL中的C++类(隐式链接)最近在整DLL,对于从DLL中导出 c++类,自己的学习笔记如下:我用的是VS2010.不过其他VS编译器应该都差不多吧!步骤一:建一个 win32解决方案,主工程(就是还有 main函数的)那个我就不说 了),DLL工程最后一步的Application type选中Dll:步骤二:在 DLL工程中添加两个文件: clsDLL.h, clsDLL.cpp//clsDLL.h#pragmaonce#ifndef DLLEXPT#defineDLLEXPT__declspec (dllexport)#endifclassDLLEXPT myCls{public 阅读全文

stdafx.h有什么用

2012-05-07 11:12 by java20130722, 281 阅读, 收藏,
摘要: 转自:stdafx.h到底有什么用? 首先向其致敬。 stdafx的全称应该叫做,Standard Application Fram Extend .你会发现他里面没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行。 Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下所示:◎AppWizard建立了文件stda.. 阅读全文

C++编程获得某台机器的IP地址

2012-05-06 15:55 by java20130722, 250 阅读, 收藏,
摘要: 转自:http://www.vckbase.com/document/viewdoc/?id=435下面是程序的代码,很简单://////////////////////////////////////////////////////////////// // // 本程序报告本机上每一块网卡的IP地址 // 命令行编译命令为: // // cl getip1.cpp wsock32.lib // // 请一定要在环境变量中正确指定LIB库的路径;可以运行vcvars32.bat // #include #include #include #include int main() { ... 阅读全文

VS2008编译的程序运行提示“由于应用程序配置不正确,应用程序未能启动”

2012-04-29 16:02 by java20130722, 481 阅读, 收藏,
摘要: 转自:http://hi.baidu.com/honfei/blog/item/2356ad9b624a01b8c9eaf485.htmlVC9编译的程序在没有装过VC9(确切的说是.Net Framework3.5)的机器上运行时,如果提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”这个错误,那 么就说明该程序动态链接了VC9的运行时库,(如果还用到了MFC,那么可能动态链接了VC9的MFC库,同理还有ATL库),以及缺少对应的 manifest文件,程序在目标机器上没有找到这些库和配置文件,因此导致了这个错误。出现这种情况的VC9编译器可能存在3个版本 阅读全文

堆和栈的区别

2012-04-21 21:29 by java20130722, 172 阅读, 收藏,
摘要: 转自:http://www.cnblogs.com/pomp/archive/2007/10/19/930145.html 首先向其致敬!简单的可以理解为:heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、 栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等其操作方式类似于数据结构中的栈。2、 堆区(heap)— 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意 阅读全文

extern "C" 和 #ifdef __cplusplus 解释

2012-04-21 09:14 by java20130722, 270 阅读, 收藏,
摘要: 时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"{和}处理其中的代码。 要明白为何使用extern "C",还得从cpp中对函数的重载处理开始说起。在c++中,为了支持重载机制,在编译生成的汇 阅读全文

VS和VC++6.0 编程时相对路径问题

2012-04-19 10:15 by java20130722, 246 阅读, 收藏,
摘要: 刚才在测试的时候发现这个问题,特记于此。 在cpp中用函数访问文件时,其相对路径不是相对于cpp所在的目录,而是相对于的工程性文件(如:, dsp, .dsw)所在的目录. 不过一般cpp和工程文件都放在一个目录下,所有一般都没有察觉,但是如果是向工程添加其他目录下的cpp文件时,可能就会出现问题了。 阅读全文

VS2008使用MSComm控件

2012-04-14 12:35 by java20130722, 241 阅读, 收藏,
摘要: 其实也不是自己完全原创,参考了不少人的资料。如果没有装过VC6.0的话就需要下载这个文件(人家要求的分数蛮高的)。先按照上面要求完成操作。然后按照如下步骤:菜单 Tool-->Choose toolbox items-->点击COM Components选项卡-->选中Miscrosoft Communications Control-->OK。之后你的toolbox上就有这个控件了。注意:在VS2008上,会自动生成CMscomm类,不过里面的函数名和VC6.0对应的函数名稍有不同。例如:VC6.0 VS2008SetPortOp... 阅读全文

ANSI编码字符转化为UNICODE编码字符

2012-04-13 11:01 by java20130722, 221 阅读, 收藏,
摘要: WCHAR* S2W(char* ansi) { int i; WCHAR* unicode; unicode = (WCHAR*) malloc ((strlen(ansi)+2)*sizeof(WCHAR)); for (i = 0; i<(signed)strlen(ansi)+1; i++) unicode[i] = ansi[i]; unicode[i] = 0; return unicode; } 记得最后要释放unicode指针。 阅读全文