关于VC中时间函数的讨论 先从一个如何在程序中延时的问题谈起,延时的方法有方法一: 使用sleep函数,它的最小单位是1ms,如延时2秒,用sleep(2000)方法二: 使用sleep函数的不利处在于期间不能处理其他的消息,如果时间太长,就好象死机
作为对象的函数指针 在STL算法中,只要用到函数对象的地方(也就是functor),都可以把函数指针作为对象来使用。这种特性不论是在思路上还是在理解functor的工作原理上都是很重要的。Functor提供了一种将函数指针传递到STL算法的途径。与以往不同的是这里函数指针可以是一个类,或者是支持函数
C#调用DLL (strmagic) 大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功能呢?答案是肯定的,大家可以通过C#中的DllImport直接调用这些功能。 DllImport所在的名字空间 using System.Runtime.InteropServices; MSD
C#调用DLL (初学者适用) 每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用DLL的方法进行介绍。首先,您需要了解什么是托管,什么是非托管。一般可以认为:非托管代码主要是基于win 32平台开发的DLL,activeX的组件,托管代码是基于.net平台开发的。如果您想深入了解托管与非托管的关系与区别,及它们的运行机制,请您自行查找资料,本文件在此不作讨论。 (一) 调用DLL中的非托管函数一般方法首
C# ref与out区别 在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。 2、使用ref和out时,在方法的参数和执行方法时,
C#-explicit 和 implicit 的含义 explicit 和 implicit 属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换explicti 表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A)implicit 表示隐式转换,如从 B -> A 只需直接赋值(A = B)隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。不过!如果对象本身在转换时
业务分析的一些原则和方法 1.业务需求的描述框架2.业务域的划分原则3.系统边界与界面4.业务对象与业务流程5.子系统间接口识别(泳道图/垂直跨职能图)6.业务算法分析业务对象是业务流程产生或者处理的实体数据,业务对象一般都具有产生、使用、消亡的过程。这个过程的细节是由业务流程决定的。业务结构描述了每一个业务域的主要子功能域。业务流程指业务操作的时间顺序或者先后步骤。功能需求描述了各个业务域完成的主要业务职能。业务接口
用auto_ptr类模板帮助动态内存管理 动态内存使用最多的是在C++应用程序的代码中。有过编程经验的程序员虽然都知道new操作符的使用一定要与delete匹配,在某些场合仍然可能有内存溢出。当异常被掷出时,程序的正常控制流程被改变,因此导致潜在的内存溢出。例如, void g() //可能掷出{ if (some_condition == false) throw X();}void func() { string * pst
模板的声明与定义 通常,我们是在.h文件中声明函数和类,而将其定义放在单独的.cpp文件中。但在使用模板时,这样做就不行了,由于编译器在碰到某个模板的实例时,必须看到实际的模板定义,而不仅仅是声明。因此,最好是同时将模板的声明和定义都放在相同的.h文件中。因为这个缘故,所有STL头文件都包含模板的定义,而不仅仅只有模板声明。
类模板与模板类 1.类模板,是想把数据类型从类中分离出来,成为一个类的描述最简单的类模板定义例如:template class 抽象类名{T ...//} 2.模板类是一些MFC自带的类库CSingleDocTemplate就是一种,本身是个抽象类,目的就是用来定义一些"Doc/Frame/View"的基础函数,用来协调三者行动和管理 3.RUNTIME_CLASS太多了,建议读读,
MFC框架的创建过程 很久没有使用MFC了,以至于都忘记MFC框架复杂的窗口、文档、视的创建过程了。下面我们跟踪一个MFC MDI的应用程序,来温习或学习一下。 使用AppWizard创建一个MDI应用程序,我创建的应用程序叫MDITest,这样MFC生成了如下的类:类名 作用CMDITestApp 派生于CWinApp的应用程序类。CMainFrame 派生于CMDIFrameWnd的MDI框架窗口类。CMDITes
内存泄露的原因 程序中的内存泄漏主要有: 1. 用new,malloc,GolbalAlloc等函数分配的堆内存没有用delete,free,GlobalFree等释放,这些内存在Debug时候都可以Dump出信息的,但只有new在Debug的时候会正确指出出错的行,因为在Debug版本中VC对new进行了重定义,建议大家分配内存时尽量使用new 2. 在绘图时创建的GDI对象没有释放,但如果你是使用MF
AfxBeginThread与CreateThread的区别 如果用MFC编程,不要用CreateThread,如果只是使用Runtime Library,用_BegingThread,总之,不要轻易使用CreateThread。这是因为在MFC和RTL中的函数有可能会用到些它们所封装的公用变量,也就是说AfxBeginThread和_BeginThread都有自己的启动代码是CreateThread所没有的。在用CreateThread所创建的线程中使
ASSERT和VERSIFY 这里给大家一些提示: ASSERT()里面的内容在Release版本中不编译。VERIFY()里面的内容仍然编译,但不再判断真假。所以,后者更安全一点。 例如:ASSERT(file.Open(strFileName)); 一旦到了Release版本中,这一行就忽略了,file根本就不Open()了,而且没有任何出错信息。如果用VERIFY()就不会有这个问题。当然这不
线程的基础知识 1. 进程与线程有那些区别和联系? 每个进程至少需要一个线程。 进程由两部分构成:进程内核对象,地址空间。线程也由两部分组成:线程内核对象,操作系统用它来对线程实施管理。线程堆栈,用于维护线程在执行代码时需要的所有函数参数和局部变量。 进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。
MFC中文档和视图的关系 1、应用程序对象有一个文档模板管理器CDocManager* m_pDocManager(第一次调用AddDocTemplate时new出来)2、文档模板管理器有一个文档模板对象列表CPtrList m_templateList(AddDocTemplate 函数负责添加该列表)3、文档模板对象拥有文档、视图、框架的静态CRuntimeClass成员指针用于动态创建,还有一个m_nIDRe
视图的三叉切分 1、在主框架中声明两个CSplitterWnd对象public: CSplitterWnd m_wndSplitter1; CSplitterWnd m_wndSplitter2;2、重载CMainFrame::OnCreateClient,左一右二方式切分BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext