Labview與其他應用程序的接口設計
下面的內(nèi)容將具體講解:
配置Call library function node (CFN)
在CFN圖標的右鍵菜單選擇“配置”,打開配置對話框,通過該對話框,可以指定動態(tài)庫存放路徑、調(diào)用函數(shù)名以及傳遞給函數(shù)的參數(shù)類型和函數(shù)返回值的類型。在配置完成后,CFN節(jié)點會根據(jù)用戶的配置自動更新其顯示。
通過browse按鈕或者直接在library name or path輸入框中指定調(diào)用函數(shù)多在.dll文件的路徑。
通過browse按鈕下的控件用戶可以指定多個線程同時調(diào)用DLL。默認情況下,labview以run in UI Thread方式調(diào)用DLL,調(diào)用的函數(shù)將直接在用戶線程中運行。另外一種方式是遞歸方式reentrant,在這種情況下可以允許多個線程同時調(diào)用DLL中的函數(shù)。但要確保正常調(diào)用,必須使dll中的代碼線程安全。
調(diào)用自己開發(fā)DLL中的函數(shù)
供項目使用。
下面就以一個簡單的求數(shù)組求和的項目為例來說明這種開發(fā)過程。
1. 在LabVIEW 中創(chuàng)建DLL 函數(shù)原型。
a) 在LabVIEW 的diagram 面板上添加一個CFN 并通過其右鍵菜單打開CFN 的配置對話框;
b) 使“Library Name or Path”輸入框為空;
c) 指定函數(shù)名“Function Name”和調(diào)用方式“Calling Conventions”分別為add_num和C;
d) 重命名返回參數(shù)的名稱為“error”,并指定其類型為Numeric 的Signed 32-bit Integer;
e) 用“Add a Parameter After”按鈕添加第一個參數(shù)p,指定其類型為Array 的4-byte Single 并設定Array Format 為Array Data Pointer;
f) 用“Add a Parameter After”按鈕添加第二個參數(shù)size,指定其類型為為Numeric 的Signed32-bit Integer 并設置參數(shù)傳遞方式為Value;
g) 用“Add a Parameter After”按鈕添加第三個參數(shù)sum,指定其類型為為Numeric 的4-byteSingle 并設置參數(shù)傳遞方式為Pointer to Value;
h) 至此,函數(shù)的原型應如下圖所示
long add_num(float *p, long size, float *sum);
i) 確定后會發(fā)現(xiàn)CFN 根據(jù)配置自動進行了更新更新后的情況如圖示。
2. 生成.C 或.C++文件,完成實現(xiàn)函數(shù)功能的代碼并為函數(shù)添加DLL 導出聲明;
在CFN 節(jié)點上通過右鍵菜單選擇“Create .C File…”生成mydll.c 文件,其內(nèi)容如下:
將以下代碼插入到句之后實現(xiàn)函數(shù)的功能。
int i;
float tmpSum = 0;
if(p != NULL)
{
for(i=0; i < size; i++)
tmpSum = tmpSum + p[i];
}
else
return (1);
* sum = tmpSum;
return (0);
在完成實現(xiàn)函數(shù)功能的代碼后,還必須為函數(shù)添加導出聲明以便能在LabVIEW 中使用這些函數(shù)。
C/C++聲名導出函數(shù)的關鍵字是_declspec (dllexport),使用該關鍵字可以代替模塊定義文件。
對于此處的例子來說,只要在函數(shù)聲明和定義部分添加關鍵字即可。最終代碼如下:
3. 在外部IDE(以VC++為例)中創(chuàng)建DLL 項目并編譯生成.dll 文件。
用VC++ 6.0 進行編譯生成.dll 文件的步驟如下:
a) 在VC++中創(chuàng)建一個DLL 項目,如果在DLL 中沒有使用MFC 就選擇創(chuàng)建“Win32Dynamic-Link Library”,否則選擇“MFC AppWizard(dll)”,對此例子來說選擇前者。選定后進入下一步選擇創(chuàng)建一個空的DLL 項目。
b) 通過Project»Add to Project»Files 添加mydll.c 到創(chuàng)建的mydll 項目之中
c) 通過Project»Settings 打開項目配置對話框,選擇C/C++選項卡。
d) 配置項目的All Configurations。選擇Settings For 下拉列表框中的All Configurations,選擇Category下拉列表框中的Code Generation,最后設置Struct member alignment 為1 Byte。
e) 配置項目的Release 版本。選擇Settings For 下拉列表框中的Win32 Release,選擇Category下拉列表框中的Code Generation,最后從Use run-time library 下拉列表框中選擇Multithreaded DLL。配置結(jié)果如圖。
f) 配置項目的Debug 版本。選擇Settings For 下拉列表框中的Win32 Debug,選擇Category
下拉列表框中的Code Generation,最后從Use run-time library 下拉列表框中選擇Debug
Multithreaded DLL。配置結(jié)果如圖
4. 在LabVIEW 項目中調(diào)用.dll 中的函數(shù)。創(chuàng)建如圖所示的VI,其中Array 為Representation»Single Precision 類型的數(shù)組,Sum 為Representation»Single Precision 類型的Indicator, error 為Representation»Long 類型的Indicator。運行后可以看到對數(shù)組求和的結(jié)果。
調(diào)用API的例子不細述了。
5、調(diào)用ActiveX控件:不細述??磍abview自帶的例子。
6、調(diào)用.dll程序集和共享庫。通過.net容器,查看自己編寫的光功率計采樣程序。有時間會加到這里面來。
評論