浅析Visual C#编写DLL

开发 后端
这里介绍以实例方式介绍了用Visual C#编写DLL实现串行通信的方法,并给出了用其它语言调用该DLL的范例。

本文是作者根据工程中的实践经验,以实例方式介绍了用Visual C#编写DLL实现串行通信的方法,并给出了用其它语言调用该DLL的范例。

一、引言

串行通讯口作为计算机与外部串行设备进行数据传输的重要端口,因其使用简单、方便,在业界的各种计算机系统中得到了广泛的应用。由于应用范围很广,软件人员在串行通信方面也积累了丰富的编程经验。关于串行通信的文章不时见于报端,并且还有一些专门讨论
串行通讯编程的书籍,为软件人员提供了丰富的资源,同时对初次涉足串口编程的软件开发者提供很好的范例帮助。

虽然关于串口编程的资料很多,但由于工程上需求多种多样,需要根据不同的条件对串口进行灵活控制,在实际应用中,常用的方法有:
(1)用汇编或标准通讯函数,往指定端口直接读写数据;
(2)利用Visual Studio提供的MSComm控件;
(3)使用Windows提供的API函数。

本文是作者在工程实践中根据实际需要,在Visual C#环境中,直接使用Windows提供的API函数实现一个串行通信动态链接库(DLL)的完整实例,实例既给出了DLL函数的编写方法,又包括一份用其它编程工具(VB)对此DLL进行声明及调用的范例。为了使读者一目了然,并减少代码量,本例作了简化,但完全可以运行。希望对需要进行串行通信编程的同行以及需要学习编写DLL的编程爱好者提供一点帮助。

二、准备知识

1、Visual C#编写DLL基本概念

动态链接库(DLL) 是Windows操作系统的基础,Windows API中的所有函数就是包含在DLL中,它有众多优点,如:简化软件项目管理以便分工合作,有助于节省内存,便于资源共享并且可以用多种语言来编写。

用VC# 编写动态链接有以下四种类型:Win32 DLL、MFC常规DLL(动态链接MFC)、MFC常规DLL(静态链接MFC)、MFC扩展DLL等,关于它们之间的区别,在此不一一介绍,可参阅相关文档。本程序的编写为Win32 DLL。

2、串行通信基础知识

在Windows系统,系统通过一个叫DCB(Device Control Block)的结构对串行口进行配置,通过Windows API GetCommState函数可以得到串行通讯口的状态信息,使用SetCommState函数可以对串行通讯口进行设置,实现串行通信一般需按以下四步进行:
(1) 打开串口。由于串口是独占性资源,因此应用程序打开串口后,别的应用程序就不能再打开此串口了。
(2)配置串口。利用GetCommState函数获取串口当前配置,根据需要更改DCB 结构中的参数,然后用SetCommState函数设置串口通讯参数。
(3)数据传送。在串口上进行数据发送接收,并根据需要进行校验,触发一些事件等等。这个串口通讯DLL的目的就是收发数据。
(4)关闭串口。不需要此串口时,关闭串口,供其它的应用程序使用。

3、CALLBACK函数

在微软的官方手册中是这样定义CALLBACK函数的:“CALLBACK函数是由应用程序定义而由操作系统调用的函数”。在我们编写DLL时,就是由应用程序定义而由此DLL执行的函数,这一机制在被调用者(DLL)和调用者(应用程序)之间进行信息传递是非常有用的。这一特性,让初学者较难理解,但是它却是编写串行通信程序者的福音,正是由于使用这一特性,才可很方便地在动态链接库中实现MSComm控件中的OnComm 事件,并且可根据需要进行灵活控制。以上介绍Visual C#编写DLL。

【编辑推荐】

  1. C#特有线程功能
  2. 浅谈C#对象和集合
  3. 浅析C# FTP WebRequest对象
  4. C#分部方法的应用场景
  5. 概述C#线程功能
责任编辑:佚名 来源: 博客园
相关推荐

2011-03-31 09:13:00

Visual Stud

2009-07-31 17:28:35

C#语言调用DLL

2010-01-26 14:10:22

Visual C++

2009-08-12 18:04:44

编写C#多线程

2009-08-06 16:58:40

C#编写ActiveX

2009-08-28 15:05:35

C#编写Calenda

2009-08-24 15:58:00

Visual C#生成

2009-09-11 09:10:30

C#编写游戏

2009-08-14 10:35:25

C#最小化编写

2009-08-05 16:49:42

C#中调用dll

2009-08-14 09:43:59

C#复制构造函数

2009-09-03 17:54:04

C#开发浏览器

2009-09-24 14:59:38

C#编写COM组件

2009-08-17 18:34:50

C# ChangeCo

2009-08-14 17:45:52

C# ArrayLis

2009-08-07 17:25:37

C# SortedLi

2009-07-31 14:54:48

dll函数C#导出

2009-08-25 17:59:49

C#入门

2009-08-10 16:47:45

Visual C#数据

2009-08-19 16:50:32

Visual C#C#语言特性
点赞
收藏

51CTO技术栈公众号