代码改变世界

随笔分类 -  C++

VS2005手工根据dll产生lib

2010-12-02 14:41 by bingcaihuang, 444 阅读, 收藏, 编辑
摘要: 很多Dll发布的时候,根本就不提供lib,也或许你在使用一个未公开的dll,没有lib我们就不能静态加载,那就通过手工来生成吧。通过Dependency查看函数名,新建一个def文件,def文件名为dll的文件名字,格式如下:EXPORTSfunc1func2func3……将xxx.dll和xxx.def放到一个文件夹中,启动“VisualStudio200... 阅读全文

.def 文件 vs2005生成dll

2010-12-02 11:19 by bingcaihuang, 1316 阅读, 收藏, 编辑
摘要: 先看看EXPORTS语法规则:entryname[=internalname] [@ordinal [NONAME]] [PRIVATE] [DATA]1.entryname是要导出的函数名或变量名。这是必选项。如果导出的名称与 DLL 中的名称不同,则通过internalname指定 DLL 中导出的名称。例如,如果 DLL 导出函数func1(),要将它用作func2(),则应指定:2.@or... 阅读全文

VC++编译环境详解

2010-12-02 09:23 by bingcaihuang, 542 阅读, 收藏, 编辑
摘要: 大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利... 阅读全文

C语言编译全过程剖析

2010-12-02 09:10 by bingcaihuang, 238 阅读, 收藏, 编辑
摘要: 内容摘要:C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识、硬件知识、工具链知识都是非常多的,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的,希望大家可以多了解一些,在遇到问题时多思考、多实践。 一般情况下,我们只需要知道分成编译和连接两个阶段,编译阶段将源程序(*.c)转换成为目标代码(,一般是obj文件,至于具体过程就是上面说的那些阶段),连接阶段是把源程序转换成的目标代... 阅读全文

经典C/C++面试题

2010-12-02 09:09 by bingcaihuang, 409 阅读, 收藏, 编辑
摘要: 1.介绍一下STL,详细说明STL如何实现vector。STL(标准模版库,StandardTemplateLibrary)它由容器算法迭代器组成。STL有以下的一些优点:可以方便容易地实现搜索数据或对数据排序等一系列的算法;调试程序时更加安全和方便;即使是人们用STL在UNIX平台下写的代码你也可以很容易地理解(因为STL是跨平台的)。vector实质上就是一个动态数组,会根据数据的增加,动态的... 阅读全文

关于初始化C++类成员

2010-12-02 09:06 by bingcaihuang, 297 阅读, 收藏, 编辑
摘要: 在使用C++编程的过程中,唱唱需要对类成员进行初始化,通常的方法有两种:第一种方法:[代码]第二种方法:[代码]本文将要探讨这两种方法的异同以及如何使用这两种方法。 从技术上说,第二种方法比较好,但是在大多数情况下,两者实际上没有什么区别。第二种语法被称为成员初始化列表,之所以要使用这种语法有两个原因:一个原因是必须这么做,另一个原因是出于效率考虑。 让我们先看一下第一个原因—&mda... 阅读全文

C++中处理string对象的字符

2010-12-02 08:59 by bingcaihuang, 2305 阅读, 收藏, 编辑
摘要: 处理string对象的字符常用方法如下:isalnum():判断字符是否是字母或数字;isalpha():判断字符是否是字母;iscntrl():判断字符是否是控制字符;isdigit():判断字符是否是数字;isgraph():判断字符是否是可打印的非空格字符;ispunct():判断字符是否是标点符号;isspace():判断字符是否是空白字符;isupper():判断字符是否是大写字母;is... 阅读全文

C++引用与指针

2010-12-02 08:56 by bingcaihuang, 200 阅读, 收藏, 编辑
摘要: 一、比较一引用是C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n是m的一个引用(reference),m是被引用物(referent)。int m;int &n = m;n相当于m的别名(绰号),对n的任何操作就是对m的操作。所以n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。引用的规则:(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。(2)不能... 阅读全文

Dynamic-Link Libraries的DllMain

2010-12-01 15:26 by bingcaihuang, 269 阅读, 收藏, 编辑
摘要: 1 DLL的进入/退出函数1.1 DllMain简介跟exe有个main或者WinMain入口函数一样,DLL也有一个入口函数,就是DllMain。以“DllMain”为关键字,来看看MSDN帮助文档怎么介绍这个函数的。The DllMain function is an optional method of entry into a dynamic-link librar... 阅读全文

关于静态链接库(Lib)与动态链接库(DLL)

2010-12-01 11:52 by bingcaihuang, 897 阅读, 收藏, 编辑
摘要: 静态链接库(Lib)和动态链接库(DLL)的问题困扰了我很长时间,而当中关键的问题是两者有何联系?又有何区别呢?怎么创建?怎么使用?使用的过程中要注意什么?一直想把这个问题总结一下。  在windows下一般可以看到后缀为dll和后缀为lib的文件,但这两种文件可以分为三种库,分别是动态链接库(Dynamic-Link Libraries),目标库(Object Libraries)和导入库(Im... 阅读全文

迭代器

2010-12-01 11:17 by bingcaihuang, 311 阅读, 收藏, 编辑
摘要: 1、除了用下标访问容器(包括vector)的元素外,标准库还提供了一种方法:使用迭代器(iterator)。2、迭代器是一种检查容器内元素并遍历元素的数据类型。(概念上来理解)3、标准库为每一种 标准容器(包括vector) 都定义了一种 迭代器类型。因为迭代器对所有的容器都适用,只有少数容器支持下标操作,所以现在倾向于使用 迭代器 而不是 下标操作 来访问元素,即使对支持下标操作的vector也... 阅读全文

extern "C"

2010-11-30 13:29 by bingcaihuang, 379 阅读, 收藏, 编辑
摘要: 时常在cpp的代码之中看到这样的代码:view plaincopy to clipboardprint?#ifdef__cplusplusextern"C"{#endif//一段代码#ifdef__cplusplus}#endif这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cp... 阅读全文