[转]Visual C++ ADO数据库编程入门

ADO 是目前在Windows环境中比较流行的客户端数据库编程技术。ADO是建立在OLE DB底层技术之上的高级编程接口,因而它兼具有强大的数据处理功能(处理各种不同类型的数据源、分布式的数据处理等等)和极其简单、易用的编程接口,因而得到了广泛的应用。而且按微软公司的意图,OLE DB和ADO将逐步取代 ODBC和DAO。现在介绍ADO各种应用的文章和书籍有很多,本文着重站在初学者的角度,简要探讨一下在VC++中使用ADO编程时的一些问题。我们希望阅读本文之前,您对ADO技术的基本原理有一些了解。  一、在VC++中使用ADO编程  ADO实际上就是由一组Automation对象构成的组...
数据库 | 2008-11-22 15:59 | 阅读 2893 次 | 评论 0 条

[转]Winsock API的VC网络编程

一、实现方法  在网络编程中最常用的方案便是Client/Server (客户机/服务器)模型。在这种方案中客户应用程序向服务器程序请求服务。一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户向这个服务的地址提出了连接请求。在这个时刻,服务程序被"惊醒"并且为客户提供服务-对客户的请求作出适当的反应。  为了方便这种Client/Server模型的网络编程,90年代初,由Microsoft联合了其他几家公司共同制定了一套WINDOWS下的网络编程接口,即Windows Sockets规范,它不是一种网络协议,而是一套开放的、支持多种协议...

第3章 邮 槽

Microsoft Windows NT 、Windows 2000 、Windows 95和Windows 98 (含第二版)—但 不包括Windows CE—提供了一种简单的单向“进程间通信”(interprocess communication, I P C )机制。这个机制的名字非常古怪,叫作“邮槽”(M a i l s l o t )。用最简单的话来说,通过 邮槽,客户机进程可将消息传送或广播给一个或多个服务器进程。在同一台计算机的不同进 程之间,或在跨越整个网络的不同计算机的进程之间,协助进行消息的传输。用邮槽来开发 应用程序是一件非常简单的事情,不要求对...

第2章 重 定 向器

Wi n d o w s使应用程序能通过操作系统内建的文件系统服务在网络上通信。有时候,我们 将之称为“网络操作系统”(N O S )能力。本章准备利用Windows 95 、Windows 98 、Wi n d o w s N T 、Windows 2000和Windows CE等均含有的Wi n d o w s文件系统组件,向大家展示这些网络 连接能力。本章的目的是让大家理解这些能力与邮槽和命名管道连网技术的关系。邮槽和命 名管道连网技术分别是第3章和第4章的主题。 若应用程序希望访问本地系统中的文件,需要依赖操作系统来满足 I / O (输入/输出)请...

VC++完整建议一个空白窗口代码

#include<windows.h>#include<stdio.h>LRESULT CALLBACK WinSunProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain( HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ WNDCLASS wndclas; wndclas.cbClsExtra=0; wndclas.cbWndExtra=0; wndclas.hbrBack...
默认分类 | 2008-09-30 19:36 | 阅读 3327 次 | 评论 0 条

VC++经典书籍

VC++书籍:MFC深入浅出VC++ 6.0 MFC类库参考手册VC++6编程方法VC++实例教程Visual C++6.0从入门到精通Visual C++MFC编程实例VISUAL C++MFC扩展编程实例
默认分类 | 2008-09-29 13:03 | 阅读 5618 次 | 评论 0 条

error LNK2001: unresolved external symbol _main解决

error LNK2001: unresolved external symbol _main解决办法2007年04月07日 星期六 11:39作者: liuhuinwpu 发表日期: 2006-05-28 复制链接 收藏解决外部符号错误:_main,_WinMain@16,__beginthreadex ) 在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数,就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有: libcmtd.lib(crt0.obj) : error LNK2001: unresolved ext...
默认分类 | 2008-09-29 12:46 | 阅读 10313 次 | 评论 0 条

转学习C++从入门到精通的的十本最经典书籍

《C++Primer》《C++Primer Plus》《Essential C++》《Effective C++》、《More Effective C++》《C++编程思想》《C++大学教程》《C++语言的设计和演化》《C++程序设计语言《深度探索C++对象模型》《C++程序设计教程》(钱能-清华版) 对类成员函数的几大分类 读取函数返回私有数据成员值函数设置私有数据成员值函数实现类特性的函数各种操作的函数(初始化类对象,指定类对象,将类与内部类型或者其他类进行相互转换以及处理类对象内存) 测试条件真假-判定函数 容器判断函数isEmpty Time类判定函数is...
默认分类 | 2008-09-27 19:45 | 阅读 4567 次 | 评论 0 条

Effective C++ (7)

第七章 杂项 进行高效的C++程序设计有很多准则,其中有一些很难归类。本章就是专门为这些准则而安排的。不要因此而小看了它们的重要性。要想写出高效的软件,就必须知道:编译器在背后为你(给你?)做了些什么,怎样保证非局部的静态对象在被使用前已经被初始化,能从标准库得到些什么,从何处着手深入理解语言底层的设计思想。本书最后的这个章节,我将详细说明这些问题,甚至更多其它问题。 条款45: 弄清C++在幕后为你所写、所调用的函数 一个空类什么时候不是空类? ---- 当C++编译器通过它的时候。如果你没有声明下列函数,体贴的编译器会声明它自己的版本。这些函数是:一个拷贝构造函数,...
默认分类 | 2008-09-27 19:29 | 阅读 2639 次 | 评论 0 条

Effective C++ (6)

默认分类 | 2008-09-27 19:27 | 阅读 2512 次 | 评论 0 条

Effective C++ (5)

条款29: 避免返回内部数据的句柄 请看面向对象世界里发生的一幕: 对象a:亲爱的,永远别变心!对象b:别担心,亲爱的,我是const。 然而,和现实生活中一样,a会怀疑,"能相信b吗?" 同样地,和现实生活中一样,答案取决于b的本性:其成员函数的组成结构。 假设b是一个const string对象: class string {public: string(const char *value); // 具体实现参见条款11 ~string(); // 构造函数的注解参见条款m5 operator cha...
默认分类 | 2008-09-27 19:26 | 阅读 2621 次 | 评论 0 条

Effective C++ (4)

第四章 类和函数:设计与声明 在程序中声明一个新类将导致产生一种新的类型:类的设计就是类型设计。可能你对类型设计没有太多经验,因为大多数语言没有为你提供实践的机会。在c++中,这却是很基本的特性,不是因为你想去做才可以这么做,而是因为每次你声明一个类的时候实际上就在做,无论你想不想做。 设计一个好的类很具有挑战性,因为设计好的类型很具有挑战性。好的类型具有自然的语法,直观的语义和高效的实现。在c++中,一个糟糕的类的定义是无法实现这些目标的。即使一个类的成员函数的性能也是由这些成员函数的声明和定义决定的。 那么,怎么着手设计高效的类呢?首先,必须清楚你面临的问题。实际上,设...
默认分类 | 2008-09-27 19:24 | 阅读 2675 次 | 评论 0 条

Effective C++(3)

构造函数,析构函数和赋值操作符 几乎所有的类都有一个或多个构造函数,一个析构函数和一个赋值操作符。这没什么奇怪的,因为它们提供的都是一些最基本的功能。构造函数控制对象生成时的基本操作,并保证对象被初始化;析构函数摧毁一个对象并保证它被彻底清除;赋值操作符则给对象一个新的值。在这些函数上出错就会给整个类带来无尽的负面影响,所以一定要保证其正确性。本章我将指导如何用这些函数来搭建一个结构良好的类的主干。 条款11: 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符 看下面一个表示string对象的类: // 一个很简单的string类class string {public...
默认分类 | 2008-09-27 19:21 | 阅读 1873 次 | 评论 0 条

Effective C++ 2

条款5:对应的new和delete要采用相同的形式 下面的语句有什么错? string *stringarray = new string[100]; ... delete stringarray; 一切好象都井然有序——一个new对应着一个delete——然而却隐藏着很大的错误:程序的运行情况将是不可预测的。至少,stringarray指向的100个string对象中的99个不会被正确地摧毁,因为他们的析构函数永远不会被调用。 用new的时候会发生两件事。首先,内存被分配(通过operator new 函数,详见条款7-10和条款m8),然后,为被分配的内...
默认分类 | 2008-09-27 19:19 | 阅读 2400 次 | 评论 0 条

Effective C++

这个条款最好称为:“尽量用编译器而不用预处理”,因为#define经常被认为好象不是语言本身的一部分。这是问题之一。再看下面的语句: #define ASPECT_RATIO 1.653编译器会永远也看不到ASPECT_RATIO这个符号名,因为在源码进入编译器之前,它会被预处理程序去掉,于是ASPECT_RATIO不会加入到符号列表中。如果涉及到这个常量的代码在编译时报错,就会很令人费解,因为报错信息指的是1.653,而不是ASPECT_RATIO。如果ASPECT_RATIO不是在你自己写的头文件中定义的,你就会奇怪1.653是从哪里来的,甚至会花时间跟踪下去。这个问题也会出现在...
默认分类 | 2008-09-27 19:18 | 阅读 2941 次 | 评论 0 条