- 博客(40)
- 收藏
- 关注
原创 关于VC中时间函数的讨论
先从一个如何在程序中延时的问题谈起,延时的方法有方法一: 使用sleep函数,它的最小单位是1ms,如延时2秒,用sleep(2000)方法二: 使用sleep函数的不利处在于期间不能处理其他的消息,如果时间太长,就好象死机
2011-08-02 15:19:17
831
原创 作为对象的函数指针
在STL算法中,只要用到函数对象的地方(也就是functor),都可以把函数指针作为对象来使用。这种特性不论是在思路上还是在理解functor的工作原理上都是很重要的。Functor提供了一种将函数指针传递到STL算法的途径。与以往不同的是这里函数指针可以是一个类,或者是支持函数
2011-08-02 15:15:15
527
转载 C#调用DLL (strmagic)
大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功能呢?答案是肯定的,大家可以通过C#中的DllImport直接调用这些功能。 DllImport所在的名字空间 using System.Runtime.InteropServices; MSD
2010-01-14 10:58:00
758
转载 C#调用DLL (初学者适用)
每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用DLL的方法进行介绍。首先,您需要了解什么是托管,什么是非托管。一般可以认为:非托管代码主要是基于win 32平台开发的DLL,activeX的组件,托管代码是基于.net平台开发的。如果您想深入了解托管与非托管的关系与区别,及它们的运行机制,请您自行查找资料,本文件在此不作讨论。 (一) 调用DLL中的非托管函数一般方法首
2010-01-14 10:38:00
797
转载 C# ref与out区别
在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。 2、使用ref和out时,在方法的参数和执行方法时,
2010-01-12 10:28:00
735
转载 C#-explicit 和 implicit 的含义
explicit 和 implicit 属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换explicti 表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A)implicit 表示隐式转换,如从 B -> A 只需直接赋值(A = B)隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。不过!如果对象本身在转换时
2010-01-12 10:21:00
873
原创 业务分析的一些原则和方法
1.业务需求的描述框架2.业务域的划分原则3.系统边界与界面4.业务对象与业务流程5.子系统间接口识别(泳道图/垂直跨职能图)6.业务算法分析业务对象是业务流程产生或者处理的实体数据,业务对象一般都具有产生、使用、消亡的过程。这个过程的细节是由业务流程决定的。业务结构描述了每一个业务域的主要子功能域。业务流程指业务操作的时间顺序或者先后步骤。功能需求描述了各个业务域完成的主要业务职能。业务接口
2010-01-06 09:26:00
1988
转载 用auto_ptr类模板帮助动态内存管理
动态内存使用最多的是在C++应用程序的代码中。有过编程经验的程序员虽然都知道new操作符的使用一定要与delete匹配,在某些场合仍然可能有内存溢出。当异常被掷出时,程序的正常控制流程被改变,因此导致潜在的内存溢出。例如, void g() //可能掷出{ if (some_condition == false) throw X();}void func() { string * pst
2010-01-06 09:23:00
650
原创 模板的声明与定义
通常,我们是在.h文件中声明函数和类,而将其定义放在单独的.cpp文件中。但在使用模板时,这样做就不行了,由于编译器在碰到某个模板的实例时,必须看到实际的模板定义,而不仅仅是声明。因此,最好是同时将模板的声明和定义都放在相同的.h文件中。因为这个缘故,所有STL头文件都包含模板的定义,而不仅仅只有模板声明。
2010-01-06 09:21:00
1093
原创 类模板与模板类
1.类模板,是想把数据类型从类中分离出来,成为一个类的描述最简单的类模板定义例如:template class 抽象类名{T ...//} 2.模板类是一些MFC自带的类库CSingleDocTemplate就是一种,本身是个抽象类,目的就是用来定义一些"Doc/Frame/View"的基础函数,用来协调三者行动和管理 3.RUNTIME_CLASS太多了,建议读读,
2010-01-06 09:15:00
616
原创 MFC框架的创建过程
很久没有使用MFC了,以至于都忘记MFC框架复杂的窗口、文档、视的创建过程了。下面我们跟踪一个MFC MDI的应用程序,来温习或学习一下。 使用AppWizard创建一个MDI应用程序,我创建的应用程序叫MDITest,这样MFC生成了如下的类:类名 作用CMDITestApp 派生于CWinApp的应用程序类。CMainFrame 派生于CMDIFrameWnd的MDI框架窗口类。CMDITes
2008-12-16 14:33:00
2312
原创 内存泄露的原因
程序中的内存泄漏主要有: 1. 用new,malloc,GolbalAlloc等函数分配的堆内存没有用delete,free,GlobalFree等释放,这些内存在Debug时候都可以Dump出信息的,但只有new在Debug的时候会正确指出出错的行,因为在Debug版本中VC对new进行了重定义,建议大家分配内存时尽量使用new 2. 在绘图时创建的GDI对象没有释放,但如果你是使用MF
2008-12-05 09:12:00
5112
1
原创 AfxBeginThread与CreateThread的区别
如果用MFC编程,不要用CreateThread,如果只是使用Runtime Library,用_BegingThread,总之,不要轻易使用CreateThread。这是因为在MFC和RTL中的函数有可能会用到些它们所封装的公用变量,也就是说AfxBeginThread和_BeginThread都有自己的启动代码是CreateThread所没有的。在用CreateThread所创建的线程中使
2007-04-19 11:08:00
5559
原创 ASSERT和VERSIFY
这里给大家一些提示: ASSERT()里面的内容在Release版本中不编译。VERIFY()里面的内容仍然编译,但不再判断真假。所以,后者更安全一点。 例如:ASSERT(file.Open(strFileName)); 一旦到了Release版本中,这一行就忽略了,file根本就不Open()了,而且没有任何出错信息。如果用VERIFY()就不会有这个问题。当然这不
2007-04-19 11:02:00
1092
原创 线程的基础知识
1. 进程与线程有那些区别和联系? 每个进程至少需要一个线程。 进程由两部分构成:进程内核对象,地址空间。线程也由两部分组成:线程内核对象,操作系统用它来对线程实施管理。线程堆栈,用于维护线程在执行代码时需要的所有函数参数和局部变量。 进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。
2006-06-22 14:21:00
1621
原创 MFC中文档和视图的关系
1、应用程序对象有一个文档模板管理器CDocManager* m_pDocManager(第一次调用AddDocTemplate时new出来)2、文档模板管理器有一个文档模板对象列表CPtrList m_templateList(AddDocTemplate 函数负责添加该列表)3、文档模板对象拥有文档、视图、框架的静态CRuntimeClass成员指针用于动态创建,还有一个m_nIDRe
2006-06-13 14:32:00
4556
1
原创 视图的三叉切分
1、在主框架中声明两个CSplitterWnd对象public: CSplitterWnd m_wndSplitter1; CSplitterWnd m_wndSplitter2;2、重载CMainFrame::OnCreateClient,左一右二方式切分BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext
2006-06-08 10:51:00
1379
原创 王的男人
昨天买了一张DVD,说是韩国的新片《王的男人》或者叫《国王与小丑》。断臂山,还是霸王别姬,晕!高丽王国的戏子生活,尽然是同性恋,呜呼哀哉!那里的国王给我的感觉和一个笑话很像:从前有一个精神病院,一个医生想考验病人的病是否好了。一天,他在墙上画了一个门,对一群患者说:你们走出这个们晚上就有包子吃!结果一群人蜂拥而上。医生叹了口气,这时突然让医生高兴的是有一个患者没动地方,站在原地。医生很
2006-06-05 10:17:00
1184
原创 程序不能脱离操作系统的原因
操作系统起到如下两个作用: 一、将所有的系统资源收归己有,然后视需要有条件地分配给用户进程,目的是协调诸多进程对系统资源的请求; 二、提供任何一个用户进程都需要的功能。比如维护页表,比如磁盘IO等。这一方面是因为第一条的理由,另一方面也简化了程序的编写。所以这些程序脱离了操作系统就无法执行。 编写“脱离”操作系统的程序主要是要完成:CPU和外设的初始化,在初始化完成之后
2006-06-02 13:20:00
1738
3
转载 VC快捷键总结
F1: 帮助 Ctrl+O :OpenCtrl+P :PrintCtrl+N :NewCtrl+Shift+F2 :清除所有书签F2 :上一个书签Shift+F2 :上一个书签Alt+F2 :编辑书签Ctrl+F2 :添加/删除一个书签F12 :Goto definitionShift+F12 :Goto referenceCtrl+Num+ :Displa
2006-06-02 09:20:00
2206
原创 Windows程序内部运行机制
Windows程序设计是种事件驱动方式的程序设计,主要基于消息的。当用户需要完成某种功能时,需要调用OS某种支持,然后OS将用户的需要包装成消息,并投入到消息队列中,最后应用程序从消息队列中取走消息并进行响应。 消息结构:typedef struct tagMSG { // msg HWND hwnd; //接收消息的窗口句柄。和哪个窗口相关联。
2006-06-01 14:32:00
1177
原创 关于电脑报
前天晚上饭后散步的时候,买了一份电脑报。 想起了很多的事情,记得第一次买电脑报是在大一的下学期,那个时候加入了学校的创业实践中心软件部门。从此开始了我的计算机生涯。 刚开始的时候,看到别人买,为了表现自己也开始买。结果很多都看不懂,索性就仍在别处。 回想起来,有些可笑。
2006-06-01 08:51:00
1289
原创 Afx全局函数和MFC常见数据类型
Afx全局函数AfxBeginThread:开始一个新的线程AfxEndThread:结束一个旧的线程AfxFormatString1:类似printf一般地将字符串格式化AfxFormatString2:类似printf一般地将字符串格式化AfxMessageBox:类似Windows API 函数 MessageBoxAfxOuputDebugString:将字符串输往除错装置AfxGet
2006-05-29 10:57:00
1700
原创 MFC映射机制剖析
一、消息映射机制1、消息响应函数:(例:在CDrawView类响应鼠标左键按下消息)1)在头文件(DrawView.h)中声明消息响应函数原型。//{{AFX_MSG(CDrawView) //注释宏afx_msg void OnLButtonDown(UINT nFlags, CPoint point);//}}AFX_MSG //注释宏说明:在注释宏之间的声明在VC中灰色显示。af
2006-05-25 14:17:00
1768
3
原创 C++如何处理内联虚函数
当一个函数是内联和虚函数时,会发生代码替换或使用虚表调用吗? 为了弄清楚内联和虚函数,让我们将它们分开来考虑。通常,一个内联函数是被展开的。 class CFoo { private: int val; public: int GetVal() { return val; } int SetV
2006-05-24 11:16:00
1215
原创 inline和static
inline: 在调用处不是call指令,而是插入函数体,适合于短小的函数,省去参数入栈以及执行call、ret指令的过程,提高函数效率。inline指定函数的存储方式。static: 该函数只能访问类的static成员(包括数据和函数),static数据成员对于该类只有一个copy,为所有对象共享,在类对象创建前已经可用。static指定函数的操作方式。
2006-05-24 10:59:00
1283
原创 互为成员两个类的声明
class B;class A{ B * m_pB;};class B{ A mA;}关键有两点:1. 其中的一个类需要提前声明(forward declaration);2. 被提前声明的类在其被具体定义之前只能声明该类的指针或引用,如上面class A定义中只能声明class B的指针(或引用)。 一旦类的定义结束(编译器在遇到类定义的右花括号之后),用该类来声明
2006-05-24 10:54:00
1604
原创 堆和栈的区别
堆:heap是大家共有的空间,分全局堆和局部堆。 全局堆就是所有没有分配的空间 局部堆就是你分配的空间 堆在操作系统对进程初始化的时候分配 运行过程中你也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏 堆里面一般放的是静态数据比如static的数据和字符串常量什么的,资源加载后一般也放在堆里面 一个进程的所有线程共有这些堆,所以对堆的操作要考虑同步和互斥的问题
2006-05-24 10:34:00
959
原创 C++中的虚函数
1.简介 虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。假设我们有下面的类层次:class A{public: virtual void foo() { cout };class B: public A{public: virtual void foo() { cout };那么,在使用的时候,我们可以:
2006-05-23 15:34:00
1002
转载 指针的艺术
指针的艺术 作为一个C++程序员,指针的直接操作内存,在数据操作方面有着速度快,节约内存等优点,仍是很多C++程序员的最爱。指针是一把双刃剑,用好了它,你就会发现指针有多么的方便,反之,你可能就头疼了,往往会出现意想不到的问题。一.什么是指针: 其实指针就像是其它变量一样,所不同的是一般的变量包含的是实际的真实的数据,而指针是一个指示器,它告诉程序在内存的哪块区域可以找到数据。
2006-05-23 15:29:00
950
原创 关于C++类成员的初始化
在使用C++编程的过程当中,常常需要对类成员进行初始化,通常的方法有两种: 第一种方法: CMYClass::CSomeClass(){ x=0; y=1;}第二种方法: CSomeClass::CSomeClass() : x(0), y(1){} 从技术上说,第二种方法比较好,但是在大多数情况下,两者实际上没有什么区别。第二种语法被称为成员初始
2006-05-23 14:18:00
1358
原创 关于const的几点说明
const1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j; //非法,导致编译错误 j=i; //合法2. 必须初始化 const int i=5; //合法 const int j; //非法,导致编译错误3. 在另一连接文件中引用const常量 extern const int
2006-05-23 14:09:00
1212
原创 SQL标准数学函数
ABS 绝对值ACOS 反余弦ASIN 反正弦ATAN 反正切ATAN2 反余切CEIL 大于或等于指定值的最小整数COS 余弦COSH 反双曲EXP 给指定数据的指数值FLOOR 小于或等于指定值的最大整数LN 自然对数LOG(N) 以N为底的对数LOG(10) 以10为底的对数MOD 模POWER 数据整数次幂N/A 随机数ROU
2006-05-22 09:46:00
3833
1
原创 SQL语言基础
一、SQL发展历史 SQL是结构化查询语言(Structrue Query Language)的英文缩写,它上使用关系模型的数据库应用语言,由IBM在70年代开发出来,作为IBM关系数据库原型System R的原型关系语言,实现了关系数据库中的信息检索。 80年代初,美国国家标准局(ANSI)开始着手制定SQL标准,最早的ANSI标准于1986年完成,它也被叫做SQL-86。标准的出台使
2006-05-22 09:35:00
2871
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人