一、dll文件的創建
dll文件的創建,我使用的是VS 2017,以此為例介紹:
1、新建一個dll項目,選擇Visual c++》Windows 桌面》動態鏈接庫(DLL)
然后會得到如下圖所示的Dll.cpp文件
會得到一個空的頭文件文件
其中#pragma once 代表這個頭文件只被編譯一次,與
1 #ifndef _DELL1_H 2 #define _DELL1_H
3
4
5
6 #endif
作用類似。
2、編寫程序
在頭文件寫聲明,值得注意的是,這里需要使用__declspec(dllexport)關鍵字修飾,表示這個函數是輸出的函數可以在外部使用,這里的 extern “C” 表示的是用c的編譯器來編譯這個函數,這里的C是大寫的要注意,這樣編譯出來的函數名就是我們希望的,否則就會產生不一樣函數名。
extern "C" __declspec(dllexport) UINT8 choose(double *a, UINT8 *b);
去源文件Dll1.cpp定義函數體,別忘記在開頭把Dll1.h頭文件包括進來。
1 #include "stdafx.h"
2 #include "Dll1.h"
3
4 double abs(double a) 5 { 6 return a > 0 ? a : -a; 7 } 8
9
10 extern "C" __declspec(dllexport) UINT8 choose( double *a,UINT8 *b) 11 { 12 double T = *a; 13 double To = *(a + 1); 14 double Tb = *(a + 2); 15 double Tt = *(a + 2); 16 if (Tb < T | Tt < T) 17 { 18 if (abs(Tb - Tt) < 3) 19 { 20 *b = 1; 21 *(b + 1) = 1; 22 } 23 else
24 { 25 *b = 0; 26 *(b + 1) = 0; 27
28 } 29 } 30 else
31 { 32 *b = 0; 33 *(b + 1) = 0; 34
35 } 36
37 return 1; 38 }
生成dll,在“生成”》生成解決方案,如果沒報錯的話就能生成dll文件,實際生成的時候,如果之前這個dll文件已經zailabview使用了,那么生成的時候可能會報錯(即使是復制出去的dll)關閉labview重新嘗試。
之后會在羡慕文件夾的“同級目錄”下的Debug文件夾出現編譯好的dll文件和lib文件,不是項目文件夾下的那個。
3、在LabVIEW中使用dll
在labview中使用dll很簡單只需要后面板上右鍵》互連接口》庫與可執行…》調用函數庫…
然后配置“調用庫函數節點”,選擇好路徑和選用的函數(我這里是之前配置的,用的是Dell2.dll庫)
再去參數里增加返回值和輸入參數,值得注意的是,這里的數據類型必須要匹配dll庫里的數據類型不然會出現各種各樣的問題,另外如果傳入的是一個數組的函數名(即數組首地址)那么這里需要選用的類型是數組,數組的類型按照你的要求選擇但是必須和dll中的一樣,數組格式為數組數據指針,這樣可以通過指針輸出多個返回值(但是每隔返回值數據類型不同怎么使用不清楚,之后解決了再補)
然后接好輸入輸出的線就可以使用了,如果你的函數或者輸入輸出類型有問題就會報錯,檢查輸入輸出的數據類型后再嘗試,另外如果沒有給數組賦初值也會出錯。
這樣運行就會報錯
但是賦初值之后就不會報錯而是正常運行