【LabVIEW】構造器節點(調用C#動態鏈接庫dll)


一、調用C#動態鏈接庫dll

https://blog.csdn.net/weixin_42314225/article/details/82910253

(1)新建VI,后面板選擇“互連接口->.NET->構造器節點”。

(2)雙擊“構造器節點”圖標,找到我們剛剛編譯好的dll文件,選中相應類名,確定。

(3)選擇“互連接口->.NET->調用節點”。

(4)將二者相連,點擊調用節點選擇相應方法。

 

二、實現遍歷DataTable

https://blog.csdn.net/huanglin529/article/details/116883400

 

互連接口-->.net-->構造器節點      

 

 

 在C#中寫一個函數來實現這個功能,然后再將工程生成一個動態鏈接庫,然后在LabVIEW中就可以調用生成的dll中所寫的這個函數來實現對datatable的讀取。

 

三、常見問題

1、調用.net構造器“內存已滿”

運行不久后提示構造器節點“內存已滿”。檢查是否有以下可能:
(1)在構造了多個引用后沒有合理的關閉引用

沒有合理的關閉引用導致了使用引用的增加,隨即導致了內存的增加。
解決方法:在使用調用節點和屬性節點時要做到每一個節點后都有一個對應的關閉引用,這樣就可以避免由於沒有關閉引用而使內存增加的問題。
注意:如果有for循環,要在循環外關閉引用,否則也會產生錯誤的。

 

(2)在while框圖中調用的構造器函數傳入參數中有FileStream類

while框圖內實時存儲數據,偷懶寫了個DLL函數,定義一個FileStream類的局部變量,傳入數據流再寫入文件。

經測試發現即使該函數不做任何操作,只要傳入了FileStream都會出現“內存已滿”錯誤。本質上應該還是沒有合理的關閉FileStream類的引用導致的,但在函數內部Close()了也沒用。

解決方法:使用LabVIEW的I/O操作類實現文件存儲。

 

 

2、.NET構造器節點 該類不包括任何公共構造器

(1)確認已經在類和方法上加了Public關鍵字;
(2)把構造函數刪掉。


3、報錯“Object reference not set to an instance of an object”

某函數調用產生這個問題。該部函數傳入參數有ref,數據類型是數組,刪掉這個傳入參數就不報錯了,但其他函數同樣傳入參數又不報錯...個例先記錄下來,原因待查。

 

4、.NET 未找到所指定的方法

用C#封裝了一個dll類庫,在LabVIEW項目中調用某方法的時候,出現了這個Error1316。

原因是調用的.NET方法在LabVIEW中不支持。

因為我為了方便調試,先把dll項目改為了WinForm應用程序,在類里寫了Main方法,最后再把項目屬性改為類庫,生成dll供LabVIEW項目調用。
但是忘了把Main()刪掉,所以出錯了。

刪掉后可以正常調用。

官網回答:
https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000P8iWSAS&l=zh-CN

 


免責聲明!

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



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