【LabVIEW】調用庫函數傳入參數、返回值數據類型配置


一、調用庫函數節點


這個知識點按照這一篇教程學習比較好:
https://blog.csdn.net/where187/article/details/82388624

幾個需要注意的點:

1、調用:

互連接口——庫與可執行程序——調用庫函數節點


2、在編寫動態庫函數時,要在同名頭文件里函數聲明處加上extern "C",如:

extern "C" _declspec(dllexport) void ArrayFloorId(double *input, int inputLength, int *output);

否則在畫程序圖調用庫函數進行配置的時候,函數名會加載錯誤(出現問號、@等其他字符)。

3、先獲取數組大小再進行數組初始化,否則連線錯誤。

4、配置

線程設置可以任意,調用規范必須設置為C。

函數各參數的數據類型一定要配置正確,否則程序會出錯。

5、技巧

是在對應的參數端口那里,右鍵,新建常量或者輸入控件,然后再在新建出來的常量或者輸入控件上面修改。因為新建出來的數據類型肯定是對的。

 

 

二、傳入參數、返回值數據類型配置

1、傳參為指針

void test(int x, int y, int *sum); //函數接受一個指向整數的指針

 

 

2、傳參為數組

int test(int x, int y, int sum[], int length); //函數接受一個整數數組

 

 

3、傳參為char類型
int test(int x, int y, char *sum); //函數接受字符串

 

4、傳遞結構體和指向結構體的指針

void test(int x, int y, char *sum,struct simpleStructCircle *largerCircle);  //任意結構體

 

5、返回指針
兩種方式:

(1)作為返回值

int * test(void)
{
     int *x = (int *) malloc(sizeof(int));
     *x = 5;
     return x;
}
因為LabVIEW調用庫函數節點只允許返回整數、字符串和Void類型,所以必須將指針作為表示內存地址的整數接受,並手動解引用指針以獲得其值。

(2)Reference 指針通過函數的形參返回
void test(int x, int y, int *sum)
{
     //sum is a pointer
     *sum = x + y;
}

同理,返回float類型數據:

void test(float& Vesionnum)
{
   Vesionnum = 1.32;
}

 

6、關於返回值為BOOL的情況

要知道的是,在C里面沒有定義布爾是基礎類型,在C++里面才有專門的布爾類型bool(字長跟BYTE相同)。
C++里面雖然有,但在實際開發中,發現大部分老的程序里在編寫動態庫的時候還是習慣自己定義BOOL。

#define FALSE   0
#define TRUE    1


typedef long BOOL;//或者typedef int BOOL;

返回時:
return FALSE;

在這種情況下,調用庫函數節點返回類型就按照 typedef 后的類型來選擇(long或int等)。

 

來源:https://forums.ni.com/t5/Developer-Center-Resources/Passing-and-Receiving-Pointers-with-C-C-DLLs-from-LabVIEW/ta-p/3522714?profile.language=zh-CN

 

其他可供參考:

https://blog.csdn.net/mysolisoft/article/details/111056587


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM