学习相关
mengxiangying504
这个作者很懒,什么都没留下…
展开
-
c++编译器和连接器介绍(转)
<br />有些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错误信息不能定位到某一行)。或者对语言的一些部分不知道为什么要(或者不要)这样那样设计。了解本文之后,或许会有一些答案。<br /> 首先看看我们是如何写一个程序的。如果你在使用某种IDE(Visual Studio,Elicpse,Dev C++等),你可能不会发现程序是如何组织起来的(很多人因此而反对初学者使原创 2010-08-20 10:47:00 · 1034 阅读 · 0 评论 -
语言环境的配置
std::locale loc = std::locale::global(std::locale("")); ...... ...... std::locale::global(loc);原创 2009-12-14 16:36:00 · 437 阅读 · 0 评论 -
Recordset.Open参数说明(转)
recordset open的语法是: Recordset.open Source,ActiveConnection,CursorType,LockType,Options 各参数的含义是: Source : 可以是一个SQL查询、数据表或存储过程 ActiveConnection: 可以是一个已打开的连接,或连接字符串 CursorType:游标类型,定义如下原创 2009-12-08 16:47:00 · 606 阅读 · 0 评论 -
SQLConfigDataSource
我的一个成功的注册数据库到odbc驱动管理器的程序:BOOL Data_Oper::register_DB_to_ODBC(){ return SQLConfigDataSource(NULL, ODBC_ADD_DSN, L"Microsoft Access Driver (*.mdb)", L"DSN=TestDB/0" L"DBQ=D://projec原创 2009-12-08 15:29:00 · 867 阅读 · 0 评论 -
visual c++数据库编程有用的网络连接
Web链接 谈到使用Visual C++和数据库,其实你并不孤单。从一开始就有数据库专用新闻组提供有关数据库创建技巧的帮助,比如microsoft.public.access。不过,这些新闻组提供的是通用信息,对实际编写应用程序并非全都那么有用。专门针对Visual C++问题的新闻组是microsoft.public.vc.database和microsoft.public.vc.mfcdata原创 2009-12-08 09:01:00 · 500 阅读 · 0 评论 -
Visual C++下使用ADO的Connection对象及其Record set对象的基本步骤
以下给出一个Visual C++下使用ADO的Connection对象及其Record set对象的基本步骤: (1) 使用import指令引入ADO2组件 例:#import "C:/ADO/msado15.dll" no_namespace rename("EOF", "EndOfFile") (2) 定义CADORecordBinding 的派生类,用于程序与数据库表字段的交互,原创 2009-12-08 08:53:00 · 957 阅读 · 0 评论 -
C++深度探索系列:智能指针(Smart Pointer) [一] (转)
C++深度探索系列:智能指针(Smart Pointer) [一] 选择自 RedStar81 的 Blog 关键字 智能指针(Smart Pointer)、C++、COM出处 主题索引:一、剖析C++标准库智能指针(std::auto_ptr) 1.Do you Sma原创 2009-11-30 17:33:00 · 568 阅读 · 0 评论 -
C++中抽象类和接口类的区别(转)
Bill Venners:我在1991至1996这5年间,几乎一直仅仅使用C++编程。在那时,我认为多重继承唯一目的就是让我能够从多个基类中继承它们各自的数据和函数 — 不管是虚拟函数还是非虚拟函数。那时候,我和我使用C++的同事几乎从未想过可以使用一种不含任何数据而仅包含纯虚函数的类,也就是现在Java中被称为接口的东西。最近您好像又越来越多地提起了抽象类这个概念,我想问问是不是最近在实验的原创 2009-11-30 16:58:00 · 1199 阅读 · 0 评论 -
汇编指令速查手册(转)
不知哪位大哥总结的,先借来用一下,免得老是翻书^_^ 附一个汇编的在线学习网站 数据传输指令───────────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PU原创 2009-11-29 14:49:00 · 361 阅读 · 0 评论 -
_stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l
int _stricmp( const char *string1, const char *string2 );int _wcsicmp( const wchar_t *string1, const wchar_t *string2 );int _mbsicmp( const unsigned char *string1, const unsigned char *str原创 2010-01-22 10:38:00 · 1587 阅读 · 0 评论 -
_ConnectionPtr open
connection_ptr_->Open(CONNECT_STRING, "", "", adAsyncConnect) 改为原创 2009-12-14 16:56:00 · 1688 阅读 · 0 评论 -
locale的使用总结(转自http://www.tucue.net/showtopic-371.aspx)
locale 是多种 facet 的容器,每种 facet 管理与 locale 相关的一种功能。facet 除了按名称区别外,更常用的是按 category 来分类。分类情况如下:locale::ctype 类别,包括以下 facet 模板ctype // 字符分类和转换codecvt // 字符编码转换locale::collate 类别,包括以下 facet 模板collate // 字符串原创 2009-12-16 17:10:00 · 939 阅读 · 0 评论 -
关于为什么类的静态成员变量不能立即初始化
我们都知道代码1是错误的,今天我去追究其原因。当然有些地方属于个人理解,有所纰漏,请不吝惜指正。 // test.hclass Test {public: static int a = 5;}; 代码1 当我们写下面的代码时,而没有在cpp文件里给出定义,就会出现无法解析的外部符号错误。这是因为"static int a;"是对变量a的声明。我们都知道,类实例化时,编译器分配内存原创 2010-08-20 17:03:00 · 8001 阅读 · 3 评论 -
va_list、va_start、va_arg、va_end的原理与使用 (转)
va_list、va_start、va_arg、va_end的原理与使用 概述由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题.下面就c语言中处理不定参数数目的问题进行讨论. 定义大家先看几宏.在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义原创 2010-03-26 16:14:00 · 541 阅读 · 0 评论 -
获得网上邻居信息
用到以下函数:WNetOpenEnum、WNetEnumResource、WNetCloseEnum原创 2010-03-26 15:29:00 · 449 阅读 · 0 评论 -
C/C++ 误区五:检查 new 的返回值 (转自http://c.chinaitlab.com/c/basic/200905/784235.html)
首先澄清一下,这个误区仅对 C++ 成立,这里不过是沿用“C/C++ 误区”这个衔头罢了。 我们都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。但是,如果你简单地把这一招应用到 new 上,那可就不一定正确了。我经常看到类似这样的代码: in原创 2010-01-06 10:51:00 · 580 阅读 · 0 评论 -
何时我们需要智能指针
有三种典型的情况适合使用智能指针:资源所有权的共享要编写异常安全的代码时避免常见的错误,如资源泄漏 共享所有权是指两个或多个对象需要同时使用第三个对象的情况。这第三个对象应该如何(或者说何时)被释放?为了确保释放的时机是正确的,每个使用这个共享资源的对象必须互相知道对方,才能准确掌握资源的释放时间。从设计或维护的观点来看,这种耦合是不可行的。原创 2009-12-18 16:09:00 · 650 阅读 · 0 评论 -
TRACE
TRACE不是函数而是MFC的宏…… 作用就是在调试器的输出窗口产生显示来自你的程序的消息原创 2009-12-18 11:06:00 · 350 阅读 · 0 评论 -
String,CString,TCHAR,char之间区别和联系(转)
char是类型TCHAR也是!不过他可以通过是否定义了UNICODE宏来判断到底是char还是w_char; TCHAR是一种字符串类型,它让你在以MBCS和UNNICODE来build程序时可以使用同样的代码,不需要使用繁琐的宏定义来包含你的代码,而char代表ASCII的字符#ifdef UNICODE typedef wchar_t TCHAR; #else typed原创 2010-02-26 11:30:00 · 817 阅读 · 0 评论 -
cerr和cout clog
cout经过缓冲后输出,cerr不经过缓冲而直接输出,一般用于迅速输出出错信息。clog流也是标准错误流,作用和cerr一样,区别在于cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出. 对于为什么有cerr和clog比如,你的程序遇到调用栈用完了的威胁(无限,没有出口的递归)。你说,你到什么地方借内存,存放你的错误信息?所以有了c原创 2009-12-15 09:03:00 · 1159 阅读 · 0 评论 -
BSTR详解一 -BSTR简介和内部结构 (1) (转)
2007-11-21 | BSTR详解一 -BSTR简介和内部结构 (1) 1 Why need BSTRCOM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。C++ 字符串是以0结束的ASCII或Unicode字符数组 Visual Basic字符串是一个ASCII字符数组加上表示长度的前缀。 Java字原创 2009-12-16 16:04:00 · 996 阅读 · 0 评论 -
typeid
1。运行时获知变量类型名称,可以使用 typeid(变量).name,需要注意不是所有编译器都输出"int"、"float"等之类的名称,对于这类的编译器可以这样使用:float f = 1.1f; if( typeid(f) == typeid(0.0f) ) ……2。对于多态类实例,想得到实际的类名称,需要使用到RTTI,这需要在编译的时候加上参数"/GR"。原创 2010-01-19 09:36:00 · 404 阅读 · 0 评论 -
boost中文手册
http://www.easycpp.org/myfiles/boost/libs/libraries.htm原创 2009-11-20 10:29:00 · 7022 阅读 · 0 评论 -
main函数的参数
我们经常用的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个, 习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针原创 2009-11-04 16:32:00 · 404 阅读 · 0 评论 -
使用cout格式化输出字符串 (转)
cout是比较常用的功能,应该了解它的一些特性。/******************************************************************** created: 2006/04/29 created: 29:4:2006 23:33 filename: e:/work/C++/输入输出和文件/CoutFormat原创 2009-11-04 16:20:00 · 873 阅读 · 0 评论 -
设置启动项
一、经典的启动——“启动”文件夹 单击“开始→程序”,你会发现一个“启动”菜单,这就是最经典的Windows启动位置,右击“启动”菜单选择“打开”即可将其打开,如所示,其中的程序和快捷方式都会在系统启动时自动运行。最常见的启动位置如下: 当前用户: 所有用户: 二、有名的启动——注册表启动项 注册表是启动程序藏身之处最多的地方,主要有以下几项:转载 2009-10-28 11:30:00 · 640 阅读 · 0 评论 -
预编译头文件(未完)
一.预编译头的概念: 所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是 以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的 C/C++代码--------甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会 被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。注意生成预编 译头文件是很耗时间转载 2009-10-26 15:23:00 · 356 阅读 · 0 评论 -
Standard Application Fram Extend
没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行。 Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。 为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下所示:转载 2009-10-26 15:14:00 · 817 阅读 · 0 评论 -
VS2005下使用CPPUNIT进行单元测试(全过程)
一、单元测试与CPPUNIT简介 几乎每个开发人员都写过测试代码,但是往往这些代码不系统,也没有良好的管理,同时在测试代码编写过程中也有很多重复的劳动,比较繁琐。在一个软件开发过程中,往往会进行很多修改,迭代开发的模型随处可见,如何验证程序的功能、性能和结构是否符合要求是一项重要的工作。 单元测试是属于白盒测试和结构性测试,一般由开发人员开展,当然如果有好的测试工具支持,测试人员甚至最转载 2009-10-25 18:22:00 · 677 阅读 · 0 评论 -
c++静态成员小结,c++,static
类中的静态成员真是个让人爱恨交加的特性。我曾经在面试时,被主考官抓住这个问题一阵穷追猛打,直把我问的面红耳赤,败下阵来。所以回来之后,我痛定思痛,决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。 静态类成员包括静态数据成员和静态函数成员两部分。 一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数转载 2009-10-22 10:08:00 · 405 阅读 · 0 评论 -
继承中的消息响应(MFC)
今天做东西,A类中有对WM_LBUTTONDOWN、LVN_BEGINLABELEDIT、LVN_ENDLABLEEDIT三个消息的响应函数,用B类继承A类。使用B类时发觉不响应这些消息,必须在B类中重写响应函数,并在其中显式调用A类的响应函数,才可以正常工作。原因尚在寻找中。 --------------------------------------------------原创 2009-09-25 16:49:00 · 733 阅读 · 0 评论 -
三态树的实现
三态树节点有三种状态,分别对应:子节点全部选中、子节点部分选中、没有一个子节点被选中。 一.消息响应函数 这里需要对三个消息进行响应,分别是:NM_CLICK、WM_LBUTTONDOWN、WM_KEYDOWN,对应的响应函数分别是OnStateIconClick、OnLButtonDown和OnKeyDown。 1.OnLButtonDown原创 2009-09-30 14:45:00 · 3105 阅读 · 0 评论 -
boost shared_ptr用法(转)
Boost智能指针——shared_ptr boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法: #include #include #include class implement原创 2009-11-04 15:11:00 · 722 阅读 · 0 评论 -
assert() 函数用法(转)
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include void assert( int expression ); assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。在调试结束后,可以通过在包含#inc转载 2009-11-05 22:08:00 · 390 阅读 · 0 评论 -
字符串数组的比较
字符串数组的比较要适用strcmp。而非: char a[] = "hehe"; char b[] = "hehe"; if( a==b) //这是在比较数组的地址 if(a == "hehe") //这是拿一个数组的地址和常量字符串的地址原创 2009-11-19 17:31:00 · 907 阅读 · 0 评论 -
数组的初始化
如果维数大于列出的元素初值个数,则只初始化前面的数组元素;剩下的其他元素,若是内置类型则初始化为0,所示类类型则调用改类的默认构造函数进行初始化。原创 2009-11-18 10:18:00 · 332 阅读 · 0 评论 -
#include ""和 #include 的区别
经代码测试,有如下结论: 1.#include "" 从当前文件所在目录查找,然后到标准库目录查找。如在当前文件所在目录查找到头文件,就不会再去标准库目录查找。 2.#include 从标准库目录进行查找,另外也查找编译器参数所指定的头文件目录,在VC6.0里面,IDE设置是在Tools=〉Options=〉Directories原创 2009-11-08 20:45:00 · 394 阅读 · 0 评论 -
子类函数使用父类类型做为参数时,调用该参数的protected变量问题
#include class CTest{protected: int m_date;public: CTest(int date) { m_date = date; } virtual void roll(CTest * p_test) { std::cout m_date; //此处可以编译通过 }};class CT : publ原创 2009-11-08 21:11:00 · 889 阅读 · 0 评论 -
前缀和后缀运算符在效率上的小区别(转)
前缀和后缀运算是很基本的运算,我相信所有学过c语言和c++的人都能很好得理解他们的含义,他们的区别也是很细微的,在运行效率上有一个很小的不同。当然如果在一个很大的程序里,你的数据结构和算法不优良的时候,这样的效率改变往往是不能对大局有所改变的,就像80-20规则告诉我们的那样,但是既然他们有差异,我们为什么在必要的时候不用更有效率的呢? 这要从i++和++i的实现上来说了,我们都知道,i转载 2009-11-08 20:24:00 · 814 阅读 · 0 评论 -
隐式类型转换与转换操作符operator T
C++ 标准允许隐式类型转换,即对特定的类,在特定条件下,某些参数或变量将隐形转换成类对象 ( 创建临时对象 ) .如果这种转换代价很大 ( 调用类的构造函数 ) ,隐式转换将影响性能。 隐式转换的发生条件:函数调用中,当参数类型不匹配,如果隐式转换后能满足类型匹配条件,编译器将启用类型转换。 控制隐式类型转换的两种途径: 1) 减少函数调用的转载 2009-10-29 11:21:00 · 1225 阅读 · 0 评论