
VC学习
墨子说书
123
展开
-
COM组件
COM组件COM component(COM组件)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应转载 2013-04-01 13:40:01 · 702 阅读 · 0 评论 -
Wince MFC OLE DB SQLCE数据库访问技术(一):嵌入式目标平台安装sqlCE
首先到微软官方下载sqlCE 3.0下载地址:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=e9aa3f8d-363d-49f3-ae89-64e1d149e09b 先在PC机上安装sdk。 当然由于需要将CAB包安装到嵌入式目标跑平台,Microsoft ActiveS转载 2013-04-01 14:18:25 · 916 阅读 · 0 评论 -
Wince MFC OLE DB SQLCE数据库访问技术(二):嵌入式目标平台创建本地数据库sdf文件
前言上一节已经讲述了嵌入式目标平台上安装sqlCE,本章将介绍如何在目标平台上创建本地数据库sdf文件。备注:博客中所有关于Wince MFC OLE DB SQLCE数据库访问技术的文章都是基于SQL Server 2005 Compact Edition即 sqlCE 3.x 在讲述sqlCE之前,先来了解下,sqlCE优于wince 自带数据库的特点:转载 2013-04-01 14:19:38 · 1030 阅读 · 0 评论 -
STL介绍
STL1.模板库 求助编辑STL = Standard Template Library,标准模板库,惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容转载 2013-04-01 14:58:25 · 656 阅读 · 0 评论 -
string 转 char
1.传给未分配内存的const char* (LPCTSTR)指针. CString cstr(asdd); const char* ch = (LPCTSTR)cstr; ch指向的地址和cstr相同。但由于使用const保证ch不会修改,所以安全.2.传给未分配内存的指针. CString cstr = "ASDDSD"; char *ch转载 2013-03-21 18:37:23 · 734 阅读 · 0 评论 -
WaitForSingleObject函数
WaitForSingleObject函数VC声明DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds);VB声明Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMillisecon转载 2013-03-25 13:18:23 · 1024 阅读 · 0 评论 -
10种排序算法总结
排序算法有很多,所以在特定情景中使用哪一种算法很重要。为了选择合适的算法,可以按照建议的顺序考虑以下标准: (1)执行时间 (2)存储空间 (3)编程工作 对于数据量较小的情形,(1)(2)差别不大,主要考虑(3);而对于数据量大的,(1)为首要。 主要排序法有: 一、冒泡(Bubble)排序——相邻交换 二、选择排序——每次最小/大排在相应的位置 三转载 2013-04-08 20:00:54 · 571 阅读 · 0 评论 -
讲讲C++中的volatile关键字
引子1 猜猜看,下面这段代码有什么问题: 1234void Delay(UINT32 n) { while(—n);} 答案: 本来代码完全正常,但是为了优化性能,打开了编译器的优化。但是发现这个函数被编译器优化掉了。为了防止被优化掉,需要给函数的参数加转载 2013-03-26 19:38:40 · 629 阅读 · 0 评论 -
VC中CList用法 (转)
初学mfc者,往往对CList等mfc的Collect类的使用感到迷惑,在使用中经常会遇到许多问题,导致对vc中的Collect类的使用产生了惧怕。以下,就个人经历而言,告诉大家如何使用CList。CList是一个双向链表类。1、头文件名不可少Clist类定义在Afxtempl.h 头文件中,因此在使用该类时,需要加这个头文件名。2、理解CList的声明和构造方法CList的声转载 2013-03-28 11:11:11 · 935 阅读 · 0 评论 -
探索C++的秘密之详解extern
探索C++的秘密之详解externC和C++对函数的处理方式是不同的。extern "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern "C"来说明。AD: 2013大数据全球技术峰会低价抢票中时常在cpp的代码之中看到这样的代码:#ifde转载 2013-05-03 17:16:30 · 505 阅读 · 0 评论 -
windows消息处理机制(1)
什么是消息 消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录(一般在 C/Java/汇编 中称为“结构体”)中包含了消息的类型以及其他信息。例如,对单击鼠标所产生的消息来说,这个记录(结构体)中包含了单击鼠标的消息号(WM_LB转载 2013-05-20 12:38:55 · 740 阅读 · 0 评论 -
二叉树
排序二叉树是经常遇到的一个数据结构,相关的递归算法也是考察的重点。以下c++示例代码作为相关总结和备份:[cpp] view plaincopyprint?#include using namespace std; typedef int T; //下面是关于二叉树的遍历、查找、删除、更新数据的代码(递归算法): class bst {转载 2013-05-06 17:40:23 · 456 阅读 · 0 评论 -
C++中引用与指针的区别
1、从现象上看:指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。2、从内存分配上看:程序为指针变量分配内存区域,而引用不分配内存区域。3、从编译上看:程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以转载 2013-05-21 14:01:48 · 515 阅读 · 0 评论 -
static 静态变量
静态变量的类型说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。 对于自动变量,前面已经介绍它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。由此看来, 一个变转载 2013-05-21 13:44:47 · 722 阅读 · 0 评论 -
析构函数定义为虚函数
析构函数执行时先调用派生类的析构函数,其次才调用基类的析构函数。如果析构函数不是虚函数,而程序执行时又要通过基类的指针去销毁派生类的动态对象,那么用delete销毁对象时,只调用了基类的析构函数,未调用派生类的析构函数。这样会造成销毁对象不完全。#include#includeclass CPerson{public: virtual ~CPerson();转载 2013-05-08 16:42:36 · 588 阅读 · 0 评论 -
sizeof用法
sizeof()功能:计算数据空间的字节数1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为转载 2013-05-08 18:31:01 · 577 阅读 · 0 评论 -
this指针详解
两个被重载的赋值操作符引用了一个特殊的关键字this 当我们写如下代码时String name1( "orville" ), name2( "wilbur" );name1 = "Orville Wright";在赋值操作符中this 指向name1更一般的情况下在类成员函数中this 指针被自动设置为指向左侧的类对象我们通过这对象调用这个成员函数当我们写如下代码时ptr-翻译 2013-05-22 14:15:49 · 627 阅读 · 0 评论 -
sizeof用法---之二
sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下。但当我总结的时候才发现,这个问题既可以简单,又可以复杂,所以本文有的地方并不适合初学者,甚至都没有必要大作文章。但如果你想“知其然,更知其所以然”的话,那么这篇文章对你或许有所帮助。菜鸟我对C++的掌握尚未深入,其中不乏错误,欢迎转载 2013-05-08 18:35:40 · 581 阅读 · 0 评论 -
C++ 类成员函数重载(overload), 覆盖、重写(overrider), 隐藏(hidden)
成员函数的重载、覆盖与隐藏成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。8.2.1 重载与覆盖成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与转载 2013-05-08 18:00:54 · 992 阅读 · 0 评论 -
struct内存对齐
在实际问题中,一组数据往往具有不同的数据类型。例如, 在学生登记表中,姓名应为字符型;学号可为整型或字符型; 年龄应为整型;性别应为字符型;成绩可为整型或实型。 显然不能用一个数组来存放这一组数据。 因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构”。 它相当于其它高级语言中的记录。“结构”是一种构造类型,它是由若干“转载 2013-05-22 16:38:29 · 664 阅读 · 0 评论 -
重载、重写与重定义
1. 重载 (overload): 指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。函数重载存在于同一个类的定义中。2. 重写 (override): 父类与子类之间的多态性。子类重新定义父类中有相同名称和参数的虚函数。1) 被重写的函数不能是 static 的。必须是 virtual 的 ( 即函数在最原始的基类中被声明为 vi转载 2013-05-08 17:25:04 · 801 阅读 · 0 评论 -
C++常见笔试题
1.求下面函数的返回值(微软)int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; } 假定x = 9999。 答案:8思路:将x转化为2进制,看含有的1的个转载 2013-05-23 17:06:45 · 914 阅读 · 0 评论 -
inline 内联函数
定义内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。 动机内联扩展是用来消除函数调用时的时间开销。它通常用于频繁执行的函数。 一个小内存空间的函数非常受益。如果没有内联函数,编译器可以决定哪些函数内联 。程序员很少或没有转载 2013-05-09 14:45:03 · 759 阅读 · 0 评论 -
多态性
“多态性”一词最早用于生物学,指同一种族的生物体具有相同的特性。在面向对象的程序设计理论中,多态性的定义是:同一操作作用于不同的类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果。多态是面向对象程序设计的重要特征之一,是扩展性在“继承”之后的又一重大表现 。对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可能导致完全不同的行为,这种现象称为多态性。多转载 2013-05-23 16:32:05 · 935 阅读 · 0 评论 -
string的四个函数--构造、析构、拷贝、赋值
// String的普通构造函数 String::String(const char *str){ if(str==NULL) { m_data = new char[1]; *m_data = ‘\0’; } else { int length = strlen(str);转载 2013-05-10 15:20:59 · 834 阅读 · 0 评论 -
各种指针的定义
各种指针的定义:点击打开链接 http://www.cnblogs.com/masterhxd/archive/2011/09/12.html 转载1,一个整形数: int a;2,一个指向整形数的指针: int *a;3,一个指向指针的指针,它指向的指针指向一个整形数: int **a;4,一个有10个整形数的数组: int a[10];5,一个有10个指针的数组,转载 2013-05-28 17:00:37 · 643 阅读 · 0 评论 -
pc实现跳转。函数指针与绝对地址的跳转
一小段精彩的 C语言,1和2实现相同的功能,欢迎大伙跟帖呵(特别感谢trio老师)1 void (*theUboot)(void); 。。。。 theUboot = (void (*)(void))(0x30700000); theUboot(); 。。。。。2 (*(void (*)(void))(0x30700000))();aoki转载 2013-05-29 10:41:17 · 3891 阅读 · 0 评论 -
__declspec关键字详细用法
__declspec用于指定所给定类型的实例的与Microsoft相关的存储方式。其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI规范,而__declspec是一种扩展属性的定义。扩展属性语法简化并标准化了C和C++语言关于Microsoft的扩展。用法:__declspec ( extended-decl-modifier )extended-decl-转载 2013-05-30 19:38:18 · 644 阅读 · 0 评论 -
vc静态加载dll和动态加载dll
如果你有a.dll和a.lib,两个文件都有的话可以用静态加载的方式: message函数的声明你应该知道吧,把它的声明和下面的语句写到一个头文件中 #pragma comment(lib, "a.lib") 然后你的对话框.cpp中包含这个头文件就可以使用message函数了。如果dll没有对应的.lib文件,那么就只能使用动态加载的方式了。动态调用动态库步骤:1、创转载 2013-05-30 19:59:21 · 765 阅读 · 0 评论 -
__declspec(dllimport)的作用
是时候总结一下__declspec(dllimport)的作用了。可能有人会问:__declspec(dllimport)和__declspec(dllexport)是一对的,在动态链接库中__declspec(dllexport)管导出,__declspec(dllimport)管导出,就像一个国家一样,有出口也有进口,有什么难理解的呢?这是一种很自然的思路,开始我也是这样理解。但是转载 2013-05-30 19:44:52 · 604 阅读 · 0 评论 -
eMule电驴eDonkey源代码精辟分析
最近给一家公司写一个类似电驴的P2P客户端.写的相当的累,但是收获也很大,对电驴的代码进行了深入的分析,现在把所得贡献给大家,网上有很多对电驴协议的分析,其实有些地方是误导大家了,中国的程序员还是很小家子气,就是怕别人超过自己.进入正题,电驴的协议和各种常量参数定义在opcodes.h中,#define OP_EDONKEYHEADER 0xE3#define OP_KADE转载 2013-06-14 09:20:32 · 1340 阅读 · 0 评论 -
C++中虚函数的作用及用法
虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈。下面是对C++的虚函数这玩意儿的理解。一, 什么是虚函数(如果不知道虚函数为何物,但有急切的想知道,那你就应该从这里开始)简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进转载 2013-06-14 10:07:25 · 764 阅读 · 0 评论 -
static作用范围
static 作用于 默认具有external 属性的标识符,则更改其链接属性为internal.static 作用于 默认具有none属性的标识符, 则更改其存储期为静态存储期。 static 作用于其它类型的标识符,则无任何效果。static出现在全局变量的前面,其作用范围为(本文件内)static在局部变量的前面,说明该局部变量的储存类别为(?),可能是“无链接性的静态存储变量”转载 2013-06-17 11:24:31 · 1348 阅读 · 0 评论 -
managed, unmanaged (托管,非托管)
•概述: 托管代码是可由公共语言运行库检查和管理的代码。托管代码可以访问托管对象。使用 /clr 编译的应用程序可能包含托管数据,也可能不包含托管数据。•注释: VS2005的C++编译器参数'/clr'为是否使用托管功能提供了模块级的控制.在源代码中如果你想要托管则"#pragma managed",否则"pragma unmanaged".转载 2013-06-17 11:30:25 · 4498 阅读 · 0 评论 -
_cdecl和_stdcall
__cdecl 是C DECLaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。 _stdcall 是StandardCall的缩写,是C++的标准调用方式:所有参数从右到左依次入栈,转载 2013-06-17 12:04:24 · 708 阅读 · 0 评论 -
MFC ActiveX 控件
MFC ActiveX 控件ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,它支持广泛的 OLE 功能并可自定义以满足多种软件的需要。 Activex 控件旨在用于普通的 Activex 控件容器和在 Internet,万维网页。 可以创建 Activex 控件使用 MFC,所述,还是以 活动模板库 (atl) (ATL)。转载 2013-06-17 14:40:04 · 1161 阅读 · 0 评论 -
va_start
由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题.下面就c语言中处理不定参数数目的问题进行讨论在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义:#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(转载 2013-06-24 15:54:33 · 885 阅读 · 0 评论 -
多字节字符串与宽字符串的转换
多字节字符串与宽字符串的转换可使用C API者Win32 API.C API: mbstowcs,wcstombsWin32 API: MultiByteToWideChar, WideCharToMultiByte 下面着重介绍Win32 API的用法,C API的用法较为简单可参照Win32 API。 首先是WideCharToMultiByte 通常你需要配置转载 2013-06-25 14:14:47 · 832 阅读 · 0 评论 -
va_arg
转自:http://www.hudong.com/wiki/va_argva_arg1. 概述由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题.下面就c语言中处理不定参数数目的问题进行讨论.2. 定义大家先看几宏.在VC++6.0的include有一个转载 2013-08-09 14:52:03 · 888 阅读 · 0 评论 -
为什么析构函数定义为虚函数
先看下面一段程序:#include using namespace std;class Person{public:virtual ~Person() //加了virtual,讲析构函数声明为虚函数{ cout }};class Student : public Person{public:~St转载 2013-08-16 17:57:31 · 917 阅读 · 0 评论