- 博客(219)
- 资源 (65)
- 收藏
- 关注
原创 dll 导出的类遇到 error LNK2019 的解决方法
今天在VS2010环境下写了一个测试程序用来测试类的导出,DLL头文件如下:#if defined(CHAPTER2LIBRARY_EXPORT) // inside DLL# define CHAPTER2API __declspec(dllexport)#else // outside DLL# define CHAPTER2API __declspec
2017-08-18 13:42:19
2525
翻译 IE调用Activex控件时EVENT的三种调用方式
Test 1 uses the "for" tag to setup the callback to the activeX event. This is successful on all versions IE8, 9, 10 and 11. TestEvent Example HTML
2017-06-28 17:30:22
3974
1
转载 关于TCP和和UDP包的大小
UDP一次发送数据包的大小,TCP一次发送数据包的大小。MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些
2012-07-23 16:19:28
1888
原创 nafxcwd.lib(afxmem.obj) : error LNK2005
近日在VC6.0写一个程序,编译时出如下错误Linking...nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj)Debug/ShowLog.exe : fatal
2012-07-20 17:45:35
3028
原创 关于UDP通信中的10045错误
在做UDP通信的过程中,服务器端绑定IP和PORT: m_stLocalAddr.sin_family = AF_INET; m_stLocalAddr.sin_addr.s_addr = htonl(INADDR_ANY); m_stLocalAddr.sin_port = htons( 6000); m_hSocket = socket( PF_INET
2009-06-10 01:59:00
3679
转载 VC++中#import的使用
#import 指令1. C++中使用 COM 簡單的方法是用 #import 導入 type library2. # import 指令將 COM 產生對應的 C++類別,可以用接近於VBScript和Visual Basic的語句操作 COM3. 使用 #import 命令就可以將該文件導入到我們的程式碼中。type library 的內容將被轉換為描述了 COM Interface
2009-02-28 12:22:00
5658
转载 MFC和模块状态
什么是模块状态? 在每个使用了Microsoft Foundation Classes (MFC)的模块(EXE,DLL)中,都存在一种“全局”数据,MFC正是依靠这种全局数据才能执行正确的操作。这种全局数据就叫做MFC 模块状态。 例如,MFC应用程序经常使用下面的代码从资源文件中加载字符串: CString str;
2009-01-16 13:37:00
4883
转载 用VC写DLL中"error LNK2005: _DllMain@12 already defined"的应对
用Visual C++编写DLL,如果在new project时选了MFC DLL,而后又想写成Regular DLL,即拥有自己的DllMain()入口函数,则在build时会遇到类似如下的link错误: error LNK2005: _DllMain@12 already defined in xxx.OBJ几种解决方案:1, 你只需要在工程设置里面,把WIN32,NDEBUG
2009-01-04 17:19:00
7622
3
原创 读《大话设计模式》---观察者模式(Observer)
观察者模式(Observer)又叫发布-订阅(Public/Subscribe)模式.观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式的结构图 观察者模式一般实现:// Observer.cpp : Defines the entry point f
2008-11-30 17:59:00
2063
转载 VC下生成汇编代码的方法:
生成汇编代码的方法: debug方式下: vc8 下面是: Project- > ...Properties - > C/C++ - > OutputFiles:选择右边的Assembler Output vc6 下面是: Project Settings - > C/C++ - > Listing Files 选择Listing File Types 输出: vc8 在debug目录下的
2008-11-22 00:52:00
3505
原创 析构函数声明为私有的作用
当我们规定类只能在堆上分配内存时,就可以将析构函数声明为私有的。class alloc{public: alloc():private: ~alloc();}; 如果在栈上分配空间,类在离开作用域时会调用析构函数释放空间,此时无法调用私有的析构函数。如果在堆上分配空间,只有在delete时才会调用析构函数。 可以添加一个destroy()函
2008-11-21 23:09:00
11939
原创 operator new抛出异常的处理
operator new在无法完成内存分配请求时会抛出异常(以前的做法一般是返回0,一些旧一点的编译器还这么做,我们也可以恢复到旧的编译器方式例如:char * lp = new char[10000000]; 如果分配失败,在旧的编译器下会返回0,但是在新的编译器下会抛出异常std::bad_alloc我们也可以用在新的编译器下不抛出异常而返回0char * lp = new
2008-11-21 22:37:00
4469
原创 读《大话设计模式》---生成器模式(Builder)
生成器模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 结构图 Builder是为创建一个Product对象的各个部件指定的抽象接口。ConcreteBuilder是具体生成者,实现Builder接口,构造和装配各个部件。Product是产品角色,Director是指挥者,它是构建一个使用Builder接口的对象。主要用于创建一些复杂的对象,这些
2008-11-21 17:55:00
2137
1
原创 构造函数初始化表的使用规则
(1)如果类存在继承关系,派生类必须在其初始化表里调用基类的构造函数。class A{public: A(int x);};class B : public A{public: B(int x, int y);};//如果A没有默认构造函数,必须在初始化表里调用A的构造函数.B::B(int x, int y) :A(x) {}(2)类的const常
2008-11-19 20:21:00
1630
原创 读《大话设计模式》---外观模式(Facade)
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得一个子系统更加容易使用 外观模式结构图 外观模式的一般实现方法:#include using namespace std;class SubSystemOne{public: void MethodOne() { cou
2008-11-19 16:34:00
2320
2
原创 读《大话设计模式》---迪米特法则
迪米特法则也叫最少知识原则如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。迪米特法则首先强调的前题是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。
2008-11-19 15:15:00
1555
原创 菜鸟自学Linux之---RedHat Linux 9键盘的快捷操作
这里列举了一些你可以用来快速执行常见任务的键盘快捷操作。这些操作不仅限于所列出的内容,要了解更多命令行和键盘的的快捷操作,请访问: http://sunsite.dk/linux-newbie/lnag_commands.html#shortcuts [Ctrl] + [Alt] + [Backspace] = 杀死你当前的 X 会话。杀死图形化桌面会话,把你返回到登录屏幕。如果正常退
2008-11-19 13:59:00
1977
原创 为什么会两次调用析构函数
在类生成临时对象时,遇到一个问题,程序会两次调用析构函数#include #include using namespace std;class stack{public: stack(const char *value); ~stack(); char * data;};stack::stack(const char
2008-11-18 22:07:00
12139
14
转载 为含指针变量的类声明一个拷贝构造函数和一个赋值操作符
C++编译器会为每个类自动生成一个默认的构造函数、析构函数、赋值函数、拷贝构造函数,这当然是在你没有为你的类声明这些函数的时候。这些默认的功能函数在为你提供方便的时候,也会给你带来麻烦。例如:class string {public: string(const char *value); ~string(); ... // 没
2008-11-18 21:48:00
1705
原创 菜鸟自学Linux之---ADSL 设置全攻略
一、安装rp-pppoe到 http://www.roaringpenguin.com/pppoe/#download下载最新版rp-pppoe 的源代码。tar xzvf rp-pppoe-3.5.tar.gz然后进入解压生成的目录:cd rp-pppoe-3.5cd src接下来就是常规的配置编译和安装,一切按默认的即可:./configuremakemake install至此,安装结束,下
2008-11-18 10:46:00
1548
原创 菜鸟自学Linux之---掌握gcc和vi基本用法
编写程序可以用vi编辑器vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。 1、vi的基本概念 基本上v
2008-11-18 07:46:00
5591
3
原创 读《大话设计模式》---模板方法模式(TemplateMethond)
模板方法模式: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板方法的一般实现://AbstractClass是一个抽象类,其实也就是一个抽象模板,并且实现了一个模板方法。//这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步//骤在相应的抽象操作中,推
2008-11-17 16:53:00
3006
1
原创 C++重载操作符
一、More Effective C++:不要重载的操作符与C一样,C++使用布尔表达式简化求值法(short-circuit evaluation)。这表示一旦确定了布尔表达式的真假值,即使还有部分表达式没有被测试,布尔表达式也停止运算。例如: char *p;...if ((p != 0) && (strlen(p) > 10)) ...这里不用担心当p为空时str
2008-11-15 18:57:00
3464
4
原创 菜鸟自学Linux之---基本常识
Linux下如何用ADSL上网确定宽带线接入正确,确定ADSL开着灯也正常亮,确定网卡正常,确定网卡和ADS连接正常. 然后启动系统,确认系统上是否安装rp-pppoe这个软件(通过rpm -qa|grep pppoe来查找),如没有安装的用户,在光盘里或是到网上去down一个来,安装上后,以root用户执行adsl-setup,这样就进入了adsl的资料的设定状态,要求输入申请宽带的用户名
2008-11-15 17:07:00
1654
1
转载 高质量C++/C编程指南---常量
常量是一种标识符,它的值在运行期间恒定不变。C语言用 #define来定义常量(称为宏常量)。C++ 语言除了 #define外还可以用const来定义常量(称为const常量)。 1 为什么需要常量 如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?(1)程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示
2008-11-14 23:13:00
965
1
转载 菜鸟自学Linux之---必学的60个命令
Linux必学命令 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统。 不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个。这里笔者把比较重要
2008-11-14 17:55:00
987
原创 菜鸟自学Linux之---硬盘安装篇
我装的是red hat 91、准备好一个空区,最小要有3G,因为除了安装系统的空间外,还要一个swap区,也就是交换区。一般为内存空间的两倍左右。要是安全安装的话,最少要5G的空间。分区的格式要为FAT32,不然的话不能识别。需要注意的是:FAT32最大可以支持的磁盘大小达到2TB(2047GB),但是不能支持小于512MB的分区,基于FAT32的Win 2000/XP可以支持分区最大为32G
2008-11-14 17:53:00
1175
原创 读《大话设计模式》---原型模式(Prototype)
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。 我认为原型模式在C++中其实就相当于拷贝构造函数,clone执行的是浅拷贝,copy执行的是深拷贝。原型模式的基本代码: #include #include using namespace s
2008-11-14 14:25:00
2007
7
原创 读《C++ Primer》(第一章)
解决大问题的一种方法是把它分解成许多小问题理想情况下这些小问题可以很容易地被解决然后再把它们合在一起就可以解决大问题了如果新分割的小问题解决起来还是太大就把它分割得再小一些重复整个过程直到能够解决每个小问题这个策略就是分而治之divide and conquer 和逐步求精stepwise refinement 书店问题可以分解成四个子问题或任务:1 读销售文件2 根据书名和出版社计算销
2008-11-14 09:51:00
750
原创 二级指针和二维数组的转换
void fun(char ** p) { char (*p1)[10] = (char(*)[10])p; cout } int main(int argc, char* argv[]){ char data[][10] = {"abc","123"}; fun((char **)data);
2008-11-11 22:27:00
3955
原创 二维数组的动态分配和删除
二维数组的动态分配和删除 首先,动态支持数组的分配,必须用 new 来进行创建一段堆内存,其它的存贮区域不允许动态分配的产生。 其次,C++并没有提供真正的动态多维数组语法,想动态分配数组,必须通过一维动态数组组合形成一个类似多维数组的存贮形式,并不像静态分配多维数组,它们的用法虽说有些地方 有相似之处,但不完全相同。 再次,有些网友有一些很BT的分配方式。
2008-11-10 18:41:00
20068
8
原创 wstring的一个小例子
#include #include #include using namespace std; vector Split(wstring &s) { wstring::size_type pos=0, pre_pos=0; wstring tempword; vector TermVec; while((po
2008-11-10 15:51:00
5537
原创 c++陷阱之临时变量
1.向上强制类型转化产生临时变量 #include class Base{public: int m_b; Base(){m_b = 1;} void Say(){ m_b=7; };};class Drived:public Base{ int m_d;}; int m
2008-11-09 22:27:00
1461
1
转载 在VC6.0中使用GDI+
在VC6.0中使用GDI+ GDI+在原来GDI的基础上进行了许多的升级和优化,比如线条平滑、颜色透明度、图形变换(平移、缩放、旋转),更多图片格式支持等技术都进行了很大的改善,使用GDI+可以很方便的实现对各种图形的绘制和优化。GDI+属于.NET组合,不过VC6.0的朋友也可以很方面地使用它,在VC6.0和工程中使用GDI+的流程如下: 1.安装GDI+组件。对于
2008-11-09 17:17:00
855
原创 读《大话设计模式》---工厂方法模式(factory method)
工厂方法模式(factory method) :定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到他的子类。 简单工厂模式和工厂方法模式的区别:1.简单工厂模式简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。2.工厂方法模式工厂方法模式实现时,客户需
2008-11-08 23:37:00
1992
转载 内联函数(inline)机制与陷阱
内容提要:1.内联相对于宏的优点2.为什么“inline”只是程序员对编译器的建议(而非强制命令)3.内联失败的陷阱在C、C++中函数调用需要少量开销。有时候这少量开销积少成多,对程序性能造成影响。有时候函数本身很简单,函数调用的开销比执行函数内容本身的开销还大。C程序员一定知道可以采用宏(Macro)机制来改善上述情况。但是宏基本上是在预编译阶段做文本替换,因此它有以下缺陷:
2008-11-08 14:35:00
5778
转载 解读makefile和source文件
需要三个文件:源文件(假设只有一个), MAKEFILE, SOURCE总共三个文件。源文件是你的驱动程序了。MAKEFILE如下: ## DO NOT EDIT THIS FILE!!! Edit ./sources. if you want to add a new source# file to this component. This file merely indirects to
2008-11-08 14:05:00
2676
转载 有关TinyXML使用的简单总结
这次使用了TinyXML后,觉得这个东西真是不错,于是将使用方法坐下总结来和大家分享。 该解析库在开源网站(http://sourceforge.net )上有下载,在本Blog也提供下载(下载TinyXML) TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们
2008-11-07 10:20:00
699
转载 详细解说STL hash_map
用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典... 这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻的方法就是取得所有的记录,然后按照名字一个一个
2008-11-07 08:04:00
674
原创 读《大话设计模式》---代理模式(proxy)
代理模式(proxy)为其他对象提供一个代理以控制对这个对象的访问。结构图//Subject类,定义了RealSubjext和Proxy的公共接口,这样就在任何使用RealSubject的地方可以使用Proxy class Subject{public: virtual void Request() = 0;};//RealSubject类,定
2008-11-05 21:50:00
1383
1
C++问题集-C++ FAQ (2nd editer).CHM
2008-09-05
《Windows用户态程序高效排错》
2008-08-25
《计算机编程艺术三》
2008-08-24
计算机编程艺术卷1
2008-08-22
全局键盘钩子源码
2008-08-22
学习.Web.设计(高清晰PDF).Part2.rar
2008-08-20
学习.Web.设计(高清晰PDF).Part1.rar
2008-08-20
一本使用qt的介绍c++和设计模式的好书 .rar
2008-08-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人