随笔分类 -  C++

摘要:dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll还有其他的文件格式如.ocx等,所有的.dll文件都是可执行;lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须:1. 包含一个对应的头文件告知编译器lib文件里面的具体内容2 .设置lib文件允许编译器去查找已经编译好的二进制代码如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个 阅读全文

posted @ 2011-12-20 23:08 无忧consume 阅读(260) 评论(0) 推荐(0) |

该文被密码保护。

posted @ 2011-12-20 23:07 无忧consume 阅读(1) 评论(0) 推荐(0) |

摘要:http://www.cnblogs.com/bpbp/archive/2011/07/13/2104816.html前经常遇到这个警告信息,因为运行并没有什么问题,所以也没深究。但是耿耿于怀那个“ 0 个错误,0 个警告”的成功提示,在网上搜了一下。原来问题出在默认库的引用选择上。VS2008,项目——属性——配置属性——C/C++——代码生成:他有/MT,/MTd,/Md,/MDd四个选项,你必须让所有使用的库都使用相同的配置,否则就会有相应的提示,甚至可能会出现无法解析的函数。有时我们使用的库不是自己可以控制的,那么就只能把工程属性设置成和你使用的库相同的选项。错误1 error LNK 阅读全文

posted @ 2011-12-20 23:06 无忧consume 阅读(292) 评论(0) 推荐(0) |

摘要:系统中的定义是:WINUSERAPIHANDLEWINAPILoadImageA( HINSTANCE, LPCSTR, UINT, int, int, UINT);WINUSERAPIHANDLEWINAPILoadImageW( HINSTANCE, LPCWSTR, UINT, int, int, UINT);#ifdef UNICODE#define LoadImage LoadImageW#else#define LoadImage LoadImageA#endif // !UNICODE参数分别表示: HINSTANCE---------包含所需要图片的实例的句柄。 LPCSTR- 阅读全文

posted @ 2011-12-20 12:50 无忧consume 阅读(1212) 评论(0) 推荐(0) |

摘要:option 'Wp64'VS 2008中出现的错误1>cl : Command line warning D9035 : option 'Wp64' has been deprecated and will be removed in a future release原因:vs2008不再建议使用/wp64检测64兼容问题,因为可以直接在32位OS上交叉编译为64位代码(vs2005也可以)。vs2008建议直接使用该方法检测64位兼容性问题。该选项被设置为“不推荐”有个原因是它会导致某些template库发生许多无效的warning。解决办法:prop 阅读全文

posted @ 2011-12-19 15:38 无忧consume 阅读(547) 评论(0) 推荐(0) |

摘要:利用GetLastError()获得的socket编程中常见错误常数值描述sckOutOfMemory7内存不足sckInvalidPropertyValue380属性值无效。sckGetNotSupported394属性不可读。sckSetNotSupported383属性是只读的。sckBadState40006所请求的事务或请求本身的错误协议或者错误连接状态。sckInvalidArg40014传递给函数的参数格式不确定,或者不在指定范围内。sckSuccess40017成功。sckUnsupported40018不受支持的变量类型。sckInvalidOp40020在当前状态下的无效操 阅读全文

posted @ 2011-12-19 15:36 无忧consume 阅读(1343) 评论(0) 推荐(0) |

摘要:C++模板类容器之map及对象副本深/浅拷贝一般地当我们只想知道一个值是否存在时,set最有用处;希望存储也可能修改一个相关的值时,map最为有用.map提供一个键值对容器,在map(也叫关联数组)中我们提供一个键/值对,键用来索引,而值用作被存储和检索的数据.在使用map和set时两个最主要的动作是向里面放入元素以及查询元素是否存在.首先要包含头文件#include <map>定义并生成map为定义map对象我们至少要指明键和值的类型例如map<string, int>word_count;//定义名为word_count的map,键值为string类型,value为 阅读全文

posted @ 2011-12-18 13:33 无忧consume 阅读(1157) 评论(0) 推荐(0) |

摘要:STL 中的Vector 、Deque、Listvector deque 以及list 都是动态增长的,在这三者之中选择的准则主要是关注插入特性以及对元素的后续访问要求vector表示一段连续的内存区域每个元素被顺序存储在这段内存中。对vector 的随机访问效率很高 。但是在任意位置而不是在vector 末尾插人元素则效率很低,因为它需要把待插入元素右边的每个元素都拷贝一遍。类似地删除任意一个而不是vector的最后一个元素效率同样很低deque也表示一段连续的内存区域但是与vector 不同的是它支持高效地在其首部插入和删除元素它通过两级数组结构来实现一级表示实际的容器第二级指向容器的首和 阅读全文

posted @ 2011-12-15 02:02 无忧consume 阅读(259) 评论(0) 推荐(0) |

摘要:fputc,fputchar,putc,putchar,putch,fputs,putsint fputc( int c, FILE *stream );从流中输出字符int fputchar( int c );从标准输出流输出字符putc 同fputcputchar 同fputcharputch在<conio.h>int putch( int c );从控制台输出字符int fputs( const char *string, FILE *stream );从流中输出字符串int puts( const char *string );从标准输出流输出字符串puts在输出的时候会自 阅读全文

posted @ 2011-12-14 13:56 无忧consume 阅读(573) 评论(0) 推荐(1) |

摘要:MFC模态对话与非模态对话框Generally Speaking(1)创建一非模态对话框CMyDlg*pMainWnd=newCMyDlg;pMainWnd->Create();(2)创建一模态对话框CMyDlgdlg;dlg.Domdal();非模态的对话框是独立的,就是说和主程序可以同时交换数据,而模态的对话框则只能和自己交换。换句话说,模态对话框很霸道,你开了它就无法在同一个应用程序中的其他地方干活了,比如那个经常用的openfile dialog。非模态对话框就很随和,开了它你还可以爱干嘛干嘛。还有一个区别在于内存分配,new在堆中,另一在栈中,一般说两者一样,但如果你在对话框中 阅读全文

posted @ 2011-12-13 14:41 无忧consume 阅读(428) 评论(0) 推荐(0) |

摘要:手把手教你建立一个模态对话框(MFC):注:模态与非模态对话框区别如果是模态的,那么弹出后该程序的其它窗口就呈不可用的状态,原来程序暂停执行,直到这个模态窗口关闭后才回到原来程序继续。非模态的就是直接显示出来,然后原来的程序继续执行下面的语句,而且其它窗口也呈可用状态。1.选择File/New/MFCAppWizard[exe],Projectname为Test,单击OK.2.选择Singledocument,单击Finish.3.选择左侧Workspace/ResourceView,在Dialog上单击右键,选择InsertDialog,默认名字为IDD_DIALOG1.4.双击右侧工作区中 阅读全文

posted @ 2011-12-13 14:39 无忧consume 阅读(611) 评论(0) 推荐(0) |

摘要:C/C++程序编译步骤 如何生成可执行文件 电子计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由“0”和“1”组成的指令序列交由计算机执行,这种语言,就是机器语言。 为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“A D D”代表加法,“M O V”代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。然而计算机 阅读全文

posted @ 2011-12-12 18:35 无忧consume 阅读(993) 评论(0) 推荐(1) |

摘要:全局变量、局部变量、静态全局变量、静态局部变量的区别C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。从作用域看:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。局部变量也只有局部作用域,它 阅读全文

posted @ 2011-12-10 22:57 无忧consume 阅读(272) 评论(0) 推荐(1) |

摘要:VC下Debug和Release区别VC下Debug和Release区别最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致后面处理异常。网上查找了些资料,在这罗列汇总下,做为备忘~一、Debug 和 Release 的区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 De 阅读全文

posted @ 2011-12-09 14:29 无忧consume 阅读(201) 评论(0) 推荐(0) |

摘要:VC中DEBUG版本可以正常运行的程序有时无法在RELEASE版本下运行在VC中当整个工程较大时,软件时常为出现在DEBUG状态下能运行而在RELEASE状态下无法运行的情况。由于开发者通常在DEBUG状态下开发软件,所以这种情况时常是在我们辛苦工作一两个月后,满怀信心的准备将软件发行时发生。为了避免无谓的损失,我们最好进行以下的检查:1、时常测试软件的两种版本。2、不要轻易将问题归结为DEBUG/RELEASE问题,除非你已经充分对两种版本进行了测试。3、预处理的不同,也有可能引起这样的问题。出现问题的一种可能性是在不同版本的编译间定义了不同的预处理标记。请对你的DEBUG版本的软件试一下以 阅读全文

posted @ 2011-12-09 13:40 无忧consume 阅读(1010) 评论(0) 推荐(0) |

摘要:讲讲volatile的作用一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1).并行设备的硬件寄存器(如:状态寄存器)2).一个中断服务子程序中会访问到的非自动变量(Non-automaticvariables)3).多线程应用中被几个任务共享的变量回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所 阅读全文

posted @ 2011-12-09 13:36 无忧consume 阅读(176) 评论(0) 推荐(0) |

只有注册用户登录后才能阅读该文。

posted @ 2011-12-09 13:31 无忧consume 阅读(1) 评论(0) 推荐(0) |

摘要:Debug与Release版本的区别 Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。 Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M)。至于是否需要DLL支持,主要看你采用的编译选项。如果是基于 ATL的,则Debug和Release版本对DLL的要求差不多。如果采用的编译选项为使用MF 阅读全文

posted @ 2011-12-09 12:54 无忧consume 阅读(337) 评论(0) 推荐(0) |

摘要:assert宏的原型定义在assert.h中,其作用是如果它的条件返回错误,则终止程序执行. 原型定义: 1 #include "assert.h"2 void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。 请看下面的程序清单badptr.c: 01 #include02 #include03 #include04 int main( void )05 {06 FILE *fp;07 08 fp = fo 阅读全文

posted @ 2011-12-09 12:37 无忧consume 阅读(937) 评论(0) 推荐(0) |

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3