最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

虛擬儀器開發(fā)平臺調(diào)用外部DLL文件簡介

2021-09-10 13:39 作者:江南拱橋夜  | 我要投稿

虛擬儀器開發(fā)平臺主要包括基于圖形化編程語言的LabVIEW和基于文本式編程語言的LaWindows/CVI,LaWindows/CVI跟傳統(tǒng)的編程語言(比如C)很相似。

LabWindows/CVI 是National Instruments 公司(美國國家儀器公司,簡稱NI 公司)推出的交互式C 語言開發(fā)平臺。LabWindows/CVI 將功能強(qiáng)大、使用靈活的C 語言平臺與用于數(shù)據(jù)采集分析和顯示的測控專業(yè)工具有機(jī)地結(jié)合起來,利用它的集成化開發(fā)環(huán)境、交互式編程方法、函數(shù)面板和豐富的庫函數(shù)大大增強(qiáng)了C 語言的功能,為熟悉C 語言的開發(fā)設(shè)計人員編寫檢測系統(tǒng)、自動測試環(huán)境、數(shù)據(jù)采集系統(tǒng)、過程監(jiān)控系統(tǒng)等應(yīng)用軟件提供了一個理想的軟件開發(fā)環(huán)境。與NI公司開發(fā)的另一個虛擬儀器開發(fā)工具LabVIEW相比,其更適合中、大型復(fù)雜測試軟件的開發(fā)。

LabVIEW是一種程序開發(fā)環(huán)境,由美國國家儀器(NI)公司研制開發(fā),類似于C和BASIC開發(fā)環(huán)境,但是LabVIEW與其他計算機(jī)語言的顯著區(qū)別是:其他計算機(jī)語言都是采用基于文本的語言產(chǎn)生代碼,而LabVIEW使用的是圖形化編輯語言G編寫程序,產(chǎn)生的程序是框圖的形式。

而動態(tài)鏈接庫(Dynamic Link Library 或者 Dynamic-link Library,縮寫為 DLL),是微軟公司在微軟Windows操作系統(tǒng)中,實現(xiàn)共享函數(shù)庫概念的一種方式。?動態(tài)鏈接提供了一種方法,使進(jìn)程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù)。DLL 有助于共享數(shù)據(jù)和資源。

LaWindows/CVI顯式調(diào)用DLL文件

LaWindows/CVI可以通過多種方法調(diào)用外部dll文件,如通過“Create ActiveX Controller”或者“Create .NET Controller”等。但并不是都有效,但是LoadLibrary方法卻是一個不錯的方法。這種方法的一個好處是動態(tài)加載,在需要的地方加載,用完就釋放掉。缺點是要知道dll中的函數(shù)原型。

1.動態(tài)載入 DLL

動態(tài)載入DLL方式是指在編譯之前并不知道將會調(diào)用哪些 DLL 函數(shù),完全是在運行過程中根據(jù)需要決定應(yīng)調(diào)用哪些函數(shù)。

方法是:用 LoadLibrary 函數(shù)加載動態(tài)鏈接庫到內(nèi)存,用 GetProcAddress函數(shù)動態(tài)獲得 DLL 函數(shù)的入口地址。當(dāng)一個 DLL 文件用 LoadLibrary 顯式加載后,在任何時刻均可以通過調(diào)用 FreeLibrary 函數(shù)顯式地從內(nèi)存中把它給卸載。

動態(tài)調(diào)用DLL使用的 Windows API 函數(shù)主要有3 個,分別是 LoadLibrary、 GetProcAddress 和FreeLibrary。

2.三個函數(shù)的功能說明

1.LoadLibrary 函數(shù)

[格式]:function LoadLibrary(LibFileName : PChar): Thandle;

[功能]:加載由參數(shù) LibFileName 指定的 DLL 文件。

[說明]:參數(shù) LibFileName 指定了要裝載的 DLL 文件名,如果 LibFileName 沒有包含一個路徑,系統(tǒng)將按照:當(dāng)前目錄、Windows 目錄、Windows 系統(tǒng)目錄、包含當(dāng)前任務(wù)可執(zhí)行文件的目錄、列在 PATH 環(huán)境變量中的目錄等順序查找文件。如果函數(shù)操作成功,將返回裝載 DLL 庫模塊的實例句柄,否則,將返回一個錯誤代碼。

2.GetProcAddress 函數(shù)

[格式]:function GetProcAddress(Module:Thandle; ProcName:PChar): TfarProc;

[功能]:返回參數(shù) Module 指定的模塊中,由參數(shù) ProcName 指定的過程或函數(shù)的入口地址。

[說明]:參數(shù) Module 是包含被調(diào)用函數(shù)的 DLL 句柄,這個值由 LoadLibrary 返回,ProcName是指向含有函數(shù)名的以null結(jié)尾的字符串指針,或者可以是函數(shù)的次序值,但大多數(shù)情況下,用函數(shù)名是一種更穩(wěn)妥的選擇。如果該函數(shù)執(zhí)行成功,則返回 DLL 中由參數(shù) ProcName 指定的過程或函數(shù)的入口地址,否則返回 null 。

3.FreeLibrary 函數(shù)

[格式]:procedure FreeLibrary(Module: Thandle);

[功能]:將由參數(shù) Module 指定的 DLL 文件從內(nèi)存中卸載 1 次。

[說明]:Module 為 DLL 庫的句柄。這個值由 LoadLibrary 返回。由于 DLL 在內(nèi)存中只裝載一次,因此調(diào)用 FreeLibrary 首先使 DLL 的引用計數(shù)減 1,如果計數(shù)減為 0 則卸載該 DLL。

3.實際應(yīng)用

通過LaWindows/CVI構(gòu)建的一個簡單計算器程序為例,在工程文件中添加一個dll文件FreeMem.dll,F(xiàn)reeMem.dll用于釋放內(nèi)存,無入口參數(shù)。通過調(diào)用FreeMem.dll文件來釋放內(nèi)存,函數(shù)原型如下:void? FreeMem(void );,構(gòu)建的示例計算器程序的頭文件如下:

#include <windows.h>

#include <formatio.h>

#include <ansi_c.h>

#include <cvirte.h>??????

#include <userint.h>

#include "CAL.h"

注意:#include <windows.h>是必須添加的,因為我們需要WINDOWS的API函數(shù)。

我們需要定義以下函數(shù)和變量:

typedef void (*FreeMem)(void);

FreeMem fl=NULL;

HINSTANCE hDll;

在要進(jìn)行調(diào)用dll文件的程序模塊中添加以下代碼;

運行效果如下:

因為本程序比較小,不怎么耗內(nèi)存,因此清除內(nèi)存的效果表面上無法觀察,但是通過對話框提示可以看出,F(xiàn)reeMem.dll文件調(diào)用成功,如果工程文件中缺失FreeMem.dll的話,程序則會提示調(diào)用函數(shù) FreeMem失敗。

如果dll文件中的函數(shù)原型如下:

Char *function(const char *s1,const char *s2);

則函數(shù)及變量定義如下:

Typedef char* (*function)( const char * ,const char * );

function fl=NULL;

HINSTANCE hDll;

通過以上實例可以看出,LaWindows/CVI通過LoadLibrary方法調(diào)用外部dll文件是一個不錯的選擇。

LabVIEW調(diào)用外部DLL

為了在LabVIEW中能夠調(diào)用其他語言編寫的程序,其提供了強(qiáng)大的外部程序接口能力,這些接口包括DLL、C語言接口(CIN)、 ActiveX、NET. DDE、MATLAB等。通過DLL,用戶能夠方便地調(diào)用C、VC、VB等編程語言編寫的程序。而LabVIEW 中是通過Call Library Function Node(CLN)節(jié)點來完成DLL文件調(diào)用的。

本文通過LabVIEW構(gòu)建計算器程序為例進(jìn)行簡單的介紹。以前面提到的FreeMem.dll文件為例,在程序框圖放入Call Library Function Node,雙擊彈出對話框,在Function頁面的Library name or path中輸入已知的的FreeMem.dll文件路徑,F(xiàn)unction name選擇FreeMem,其他選項默認(rèn)。

如果是LabVIEW生成的DLL文件,在Parameters頁面不需要做改動,但是由于VI還有一路輸出,所以還需要添加一個參數(shù)y,作為DLL文件的輸出。

如果是C語言等非LabVIEW生成的DLL函數(shù),需要將return type的type選項和Data type選項改成函數(shù)定義的參數(shù)類型,對于函數(shù)里輸入的參數(shù)也都需要自行添加。Callbacks和Error Checking則不需要改動。

LV下面調(diào)用DLL時的數(shù)據(jù)類型對應(yīng)關(guān)系圖

運行效果如下:

因為本程序比較小,幾乎不消耗內(nèi)存,因此清除內(nèi)存的效果表面上無法觀察,但是通過對話框提示可以看出,dll文件調(diào)用成功,如果FreeMem.dll文件的路徑發(fā)生改變的話,程序則會提示dll文件調(diào)用失敗。

所以,使用LabVIEW也可以方便地調(diào)用各種編譯軟件生成的DLL文件。這樣,用戶在編寫大型項目時更加靈活,也為熟悉C語言的工程師提供了巨大的方便。

總結(jié)

LabVIEW相對LabWindows/ CVI比較方便上手,適合不太熟練文本編程使用,LabWindows /CVI是以標(biāo)準(zhǔn)C為基礎(chǔ)編程語言的一種開發(fā)工具,界面和一些基本使用都很象VC,功能相對強(qiáng)大,但是使用起來比LABVIEW要復(fù)雜的多。

但是兩者不僅可以方便地調(diào)用各種編譯軟件生成的DLL文件,自己也能生成DLL文件供其他編譯軟件調(diào)用。這樣,用戶在編寫大型項目時更加靈活,也為熟悉C語言的工程師提供了巨大的方便。本文只對LabVIEW和LabWindows/ CVI調(diào)用DLL文件做了一些簡單的介紹,很多高級功能和技巧,讀者可以在實際運用中逐漸掌握。


虛擬儀器開發(fā)平臺調(diào)用外部DLL文件簡介的評論 (共 條)

分享到微博請遵守國家法律
卢氏县| 焦作市| 攀枝花市| 定安县| 柞水县| 大竹县| 凌云县| 六安市| 绥宁县| 施甸县| 双鸭山市| 安化县| 桃园县| 昌吉市| 阳曲县| 中宁县| 庄浪县| 大余县| 娱乐| 宾阳县| 清苑县| 阳东县| 时尚| 西贡区| 马公市| 策勒县| 奉节县| 平潭县| 南平市| 滨海县| 友谊县| 长海县| 金昌市| 尼勒克县| 威信县| 达尔| 龙南县| 河曲县| 汨罗市| 拜城县| 商都县|