淺析Visual C#編寫DLL
本文是作者根據(jù)工程中的實踐經(jīng)驗,以實例方式介紹了用Visual C#編寫DLL實現(xiàn)串行通信的方法,并給出了用其它語言調用該DLL的范例。
一、引言
串行通訊口作為計算機與外部串行設備進行數(shù)據(jù)傳輸?shù)闹匾丝?,因其使用簡單、方便,在業(yè)界的各種計算機系統(tǒng)中得到了廣泛的應用。由于應用范圍很廣,軟件人員在串行通信方面也積累了豐富的編程經(jīng)驗。關于串行通信的文章不時見于報端,并且還有一些專門討論
串行通訊編程的書籍,為軟件人員提供了豐富的資源,同時對初次涉足串口編程的軟件開發(fā)者提供很好的范例幫助。
雖然關于串口編程的資料很多,但由于工程上需求多種多樣,需要根據(jù)不同的條件對串口進行靈活控制,在實際應用中,常用的方法有:
(1)用匯編或標準通訊函數(shù),往指定端口直接讀寫數(shù)據(jù);
(2)利用Visual Studio提供的MSComm控件;
(3)使用Windows提供的API函數(shù)。
本文是作者在工程實踐中根據(jù)實際需要,在Visual C#環(huán)境中,直接使用Windows提供的API函數(shù)實現(xiàn)一個串行通信動態(tài)鏈接庫(DLL)的完整實例,實例既給出了DLL函數(shù)的編寫方法,又包括一份用其它編程工具(VB)對此DLL進行聲明及調用的范例。為了使讀者一目了然,并減少代碼量,本例作了簡化,但完全可以運行。希望對需要進行串行通信編程的同行以及需要學習編寫DLL的編程愛好者提供一點幫助。
二、準備知識
1、Visual C#編寫DLL基本概念
動態(tài)鏈接庫(DLL) 是Windows操作系統(tǒng)的基礎,Windows API中的所有函數(shù)就是包含在DLL中,它有眾多優(yōu)點,如:簡化軟件項目管理以便分工合作,有助于節(jié)省內存,便于資源共享并且可以用多種語言來編寫。
用VC# 編寫動態(tài)鏈接有以下四種類型:Win32 DLL、MFC常規(guī)DLL(動態(tài)鏈接MFC)、MFC常規(guī)DLL(靜態(tài)鏈接MFC)、MFC擴展DLL等,關于它們之間的區(qū)別,在此不一一介紹,可參閱相關文檔。本程序的編寫為Win32 DLL。
2、串行通信基礎知識
在Windows系統(tǒng),系統(tǒng)通過一個叫DCB(Device Control Block)的結構對串行口進行配置,通過Windows API GetCommState函數(shù)可以得到串行通訊口的狀態(tài)信息,使用SetCommState函數(shù)可以對串行通訊口進行設置,實現(xiàn)串行通信一般需按以下四步進行:
(1) 打開串口。由于串口是獨占性資源,因此應用程序打開串口后,別的應用程序就不能再打開此串口了。
(2)配置串口。利用GetCommState函數(shù)獲取串口當前配置,根據(jù)需要更改DCB 結構中的參數(shù),然后用SetCommState函數(shù)設置串口通訊參數(shù)。
(3)數(shù)據(jù)傳送。在串口上進行數(shù)據(jù)發(fā)送接收,并根據(jù)需要進行校驗,觸發(fā)一些事件等等。這個串口通訊DLL的目的就是收發(fā)數(shù)據(jù)。
(4)關閉串口。不需要此串口時,關閉串口,供其它的應用程序使用。
3、CALLBACK函數(shù)
在微軟的官方手冊中是這樣定義CALLBACK函數(shù)的:“CALLBACK函數(shù)是由應用程序定義而由操作系統(tǒng)調用的函數(shù)”。在我們編寫DLL時,就是由應用程序定義而由此DLL執(zhí)行的函數(shù),這一機制在被調用者(DLL)和調用者(應用程序)之間進行信息傳遞是非常有用的。這一特性,讓初學者較難理解,但是它卻是編寫串行通信程序者的福音,正是由于使用這一特性,才可很方便地在動態(tài)鏈接庫中實現(xiàn)MSComm控件中的OnComm 事件,并且可根據(jù)需要進行靈活控制。以上介紹Visual C#編寫DLL。
【編輯推薦】