6.RS232异步串行通信
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int main(int argc, char* argv[]) { printf( "2 + 3 = %d", add( 2, 3 ) ); return 0; }
6.2.1 静态链接库
(1)库不是个怪物,编写库的程序和编写一般的程序区别不大, 只是库不能单独执行;
(2)库提供一些可以给别的程序调用的程序,别的程序要调用它
必须以某种方式指明它要调用之。
6.2.2 动态链接库
//lib.h #ifndef LIB_H #define LIB_H extern "C" int __declspec (dllexport)add(int x, int y); #endif
//lib.cpp #include "lib.h" int add(int x,int y) { return x + y; }
6.2 动态链接库
• DLL 的编制与具体的编程语言及编译器无关。只要遵循 约定的DLL接口规范和调用方式,用各种语言编写的DLL 都可以相互调用。譬如Windows提供的系统DLL(其中包 括了Windows的API),在任何开发环境中都能被调用, 不在乎其是Visual Basic、Visual C++还是Delphi。
• Visual C++ 5.0
– 集成了MFC 4.21,是4.2版以来比较大的一次升级。
• Visual C++ 6.0
– 集成了MFC6.0,于1998发行。发行至今一直被广泛地用于大大小小的项目 开发。但是,这个版本在Windows XP下运行会出现问题,尤其是在调试模 式的情况下(例如:静态变量的值并不会显示)。 这个调试问题可以通过 打一个叫“Visual C++ 6.0 Processor Pack”的补丁来解决。这个网页强调用户 也必须运行Windows 98、Windows NT4.0、或Windows 2000。
3. DLL导出变量
/* 文件名:lib.h */ #ifndef LIB_H #define LIB_H extern int dllGlobalVar; #endif
6.1.2 主要部分
• Platform SDK
– 是Visual C++和整个Visual Studio的精华和灵魂,虽然很少能直 接接触到它。大致说来,Platform SDK是以Microsoft C/C++编译 器为核心,配合MASM,辅以其他一些工具和文档资料。上面 说到Developer Studio没有编译程序的功能,那么这项工作是由 谁来完成的呢?是CL,是NMAKE,和其他许许多多命令行程序 ,这些看不到的程序才是构成Visual Studio的基石。
6.2.2 动态链接库
#include <stdio.h> #include <windows.h> typedef int(*lpAddFun)(int, int); //宏定义函数指针类型 int main( int argc, char *argv[]) {
HINSTANCE hDll; //DLL句柄 lpAddFun addFun; //函数指针 hDll = LoadLibrary("..\\Debug\\dllTest.dll"); if (hDll != NULL) { addFun = (lpAddFun)GetProcAddress(hDll, "add"); if (addFun != NULL) { int result = addFun(2, 3); printf("%d", result); } FreeLibrary(hDll); } return 0;
• Visual C++ 2.0
– 集成了MFC 3.0,第一个只发行32位的版本。该版本用户可以通过微软公司 的订阅服务(Microsoft Subscription Service)升级至2.1和2.2版本。微软公 司在这个版本中集成并升级了Visual C++1.5,作为2.0版本以及2.1版本的一 部分。Visual C++ 2.x附带了16位和32位版本的CDK,同时支持Win32s的开发 。Visual C++ 2.2及其后续版本不再升级Visual C++ 1.5。尽管出生的比 Windows 95早,这个版本的发行日期还是非常接近Windows 95,可是当 Windows 95发行时, Visual C++ 4.0也已经发行了。因此很多程序开发者直 接从1.x过渡到4.0,把2.x跳过去了
6.2.2 动态链接库
extern "C" __declspec( dllimport ) add( int x, int y); int main(int argc, char* argv[]) {
int result = add(2, 3);
printf("%d", result);
return 0; }
6.2 动态链接库
• Visual C++支持三种DLL,它们分别是Non-MFC DLL(非 MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。非MFC动态库不采用 MFC类库结构,其导出函数为标准的C接口,能被非MFC 或MFC编写的应用程序所调用;MFC规则DLL 包含一个继 承自CWinApp的类,但其无消息循环;MFC扩展DLL采用 MFC的动态链接版本创建,它只能被用MFC类库所编写 的应用程序所调用。
• Visual C++ 2005
– 也即Visual C++ 8.0,集成了MFC 8.0,于2005年11月发布。这个版本引进了 对C++/CLI语言和OpenMP的支持。
• Visual C++ 2008
– 也即Visual C++ 9Βιβλιοθήκη Baidu0,于2007年11月发布。这个版本支持.NET 3.5。
6.2 动态链接库
• DLL(Dynamic Linkable Library)的概念,我们可以简单的把 DLL看成一种仓库,它提供给我们一些可以直接拿来用 的变量、函数或类。在仓库的发展史上经历了“无库-静 态链接库-动态链接库”的时代。静态链接库与动态链接 库都是共享代码的方式,如果采用静态链接库,lib中的 指令都被直接包含在最终生成的EXE文件中了。但是若 使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件 执行时可以“动态”地引用和卸载这个与EXE独立的DLL文 件。静态链接库和动态链接库的另外一个区别在于静态 链接库中不能再包含其他的动态链接库或者静态库,而 在动态链接库中还可以再包含其他的动态或静态链接库 。
– 集成了MFC2.0,是Visual C++第一代版本,1992年推出,可同时支持16位处 理器与32位处理器版,可算是Microsoft C/C++ 7.0的更新版本。
• Visual C++ 1.5
– 集成了MFC 2.5,增加了“目标文件链接嵌入 (OLE)2.0 和支持MFC的开放式 数据库链接(ODBC)。这个版本只有16位的,也是第一个以CD-ROM为软 件载体的版本。这个版本也没有所谓“标准版”。它是最后一个支持16位软 件编程的软件,也是第一个支持基于x86机器的32位编程软件。
6.1.1 VC版本
• Visual C++ 4.0
– 集成了MFC 4.0,这个版本是专门为Windows 95以及Windows NT设计的。 用户可以通过微软公司的订阅服务(Microsoft Subscription Service)升级至 4.1和4.2版本(此版本不再支持Win32s开发)。
• Visual C++ .NET 2002
– 也即Visual C++ 7.0,于2002年发行,集成了 MFC 7.0,支持链接时代码生成 和调试执行时检查。这个版本还集成了Managed Extension for C++,以及一 个全新的用户界面(与Visual Basic和Visual C#共用)。
6.2.1 静态链接库
#include <stdio.h>
#include "F:\Lecture\2007_VC_Special\SourcePragram\StaticLinkLibrary\StaticLL\lib.h" #pragma comment( lib, "F:\\Lecture\\2007_VC_Special\\SourcePragram\\StaticLinkLibrary\\StaticLL\\Debug\\StaticL L.lib" )
6.1.1 VC版本
• Visual C++ .NET 2003
– 也即 Visual C++ 7.1,集成了MFC 7.1,于2003年发行,是对Visual C++ .NET 2002的一次重大升级。
• Embedded Visual C++
– 用于Windows CE操作系统。Visual C++作为一个独立的开发环境被Microsoft Visual Studio 2005所替代。
6.2 动态链接库
• 使用 DLL程序可以实现模块化,由相对独立的组件组成 。此外,可以更为容易地将更新应用于各个模块,而不 会影响该程序的其他部分。 • 系统同时运行的多个应用层可以同时使用同一个动态连 接库,它们在内存中只是共享DLL文件的一个拷贝,这 不但节省了内存,而且减少了文件的动态交换。只要输 出函数的变量和返回值的类型和数量不发生变化,动态 链接库中的函数可以不用重新编译链接而且直接使用, 这一点明显优于静态链接。只要遵循一定的规则,不同 语言编写的应用程序可以调用同一个动态链接库,而不 管这个函数执行什么操作。在设计应用程序时,将其拆 分成各个相互独立功能的部件,为以后对这些功能部件 各自升级提供较方便的途径。
6.1.2 主要部分
• MFC
– 从理论上来讲,MFC也不是专用于Visual C++,Borland C++, C++Builder和Symantec C++同样可以处理MFC。同时,用Visual C++编写代码也并不意味着一定要用MFC,只要愿意,用Visual C++来编写SDK程序,或者使用STL、ATL一样没有限制。不过, Visual C++本来就是为MFC打造的,Visual C++中的许多特征和 语言扩展也是为MFC而设计的,所以用Visual C++而不用MFC就 等于抛弃了Visual C++中很大的一部分功能。但是,Visual C++ 也不等于MFC。
• Visual C++ 2010
– Visual C++ 10.0,2009年发布,此版本更加稳定。VC++2010是目前最新的版 本。
6.1.2 主要部分
• Developer Studio – 这是一个集成开发环境,我们日常工作的99%都是在 它上面完成的,再加上它的标题赫然写着“Microsoft Visual C++”,所以很多人理所当然的认为,那就是 Visual C++了。其实不然,虽然Developer Studio提供了 一个很好的编辑器和很多Wizard,但实际上它没有任 何编译和链接程序的功能,真正完成这些工作的幕后 英雄后面会介绍。我们也知道,Developer Studio并不 是专门用于VC的,它也同样用于VB,VJ,VID等Visual Studio家族的其他同胞兄弟。所以不要把Developer Studio当成Visual C++, 它充其量只是Visual C++的一个 壳子而已。这一点请切记!
6.2.1 静态链接库
//lib.h #ifndef LIB_H #define LIB_H extern "C" int add(int x, int y); #endif //lib.cpp #include "lib.h" int add(int x, int y) { return x + y; }
第三篇 纺织业现场数据传输层构件的实现
第6章 RS232异步串行通信动态链接库的实现
要点
• • • • VC 概述 动态链接库 单串口异步串行通信模块开发 多串口集成的异步串行通信
6.1 VC概述
• 6.1.1 VC版本 • 6.1.2 主要部分
6.1.1 VC版本
• Visual C++ 1.0