我想使用LabVIEW的Call Library Function Node來訪問DLL函數,並讓此函數返回一個字符串以顯示在我的VI中。我會如何去做這件事?我很高興從我的DLL中返回數字,但我真的很難找到如何返回字符串的任何示例。如何使用調用將字符串傳遞迴labview庫函數節點
回答
我從你的問題中假設你已經有一個可以返回數字給Labview的DLL。從DLL返回一個字符串,我創建了一個DLL與下面的C++函數
void returnString(char myString[])
{
const char *aString = "test string";
memcpy(myString, aString, 12);
}
在LabVIEW然後我用調用庫函數節點,並將其配置如下
Library Name or Path: c:\path\to\my\custom.dll Function Name: returnString Calling Convention: C Parameters: Parameter: return type type: void Parameter: arg1 type: String string format: C String Pointer Function prototype: void returnString(CStr arg1);
連接後, arg1在程序框圖中輸出到字符串指示器並運行。字符串「test string」應該出現在前面板上。
我想有returnString功能型CSTR反應器中
CStr returnString()
{ ...
}
,但我得到了編譯DLL項目時生成錯誤。
更新感謝@ bk1e評論別忘了在Labview中爲字符串預先分配空間。
至少有幾個方法可以從一個調用庫函數節點返回一個字符串:
返回從您的DLL函數的C字符串指針,並配置調用庫函數節點有一個返回「C字符串指針」的類型。請注意,返回的字符串在函數返回後必須有效,因此它不能是指向堆棧中分配的字符串的指針。它必須是以下內容之一:在堆上分配,靜態分配,常量字符串等。
在LabVIEW目錄中看起來像
examples/dll/regexpr/Regular Expression Solution/VIs/Get Error String.vi
採用這種方法。在VI中分配一個字符串,使用Azim建議的「C String Pointer」參數將它傳遞給調用庫函數節點,並覆蓋DLL中的內容。分配字符串的一種方法是使用Initialize Array創建所需大小的u8數組,然後使用Byte Array To String將其轉換爲字符串。
確保您傳遞的字符串足夠大以容納字符串的內容,並確保將字符串長度傳遞給DLL,以便知道緩衝區的大小。我相信默認參數是一個空字符串。如果你的VI的第一個猜測不夠大,找出正確的字符串長度可能需要調用兩次DLL。
使用「String Handle」參數將字符串傳遞給調用庫函數節點,並在您的DLL中使用LabVIEW函數根據需要調整字符串大小。這需要您的DLL專門設計爲與LabVIEW接口,並需要鏈接到LabVIEW提供的靜態庫。
這種方法的一個例子是用LabVIEW作爲
examples/dll/hostname/hostname.vi
。
- 1. 節點+回調函數傳遞參數
- 2. 使用LiveConnect,調用函數不能正確傳遞字符串
- 3. 如何使用調度庫調用函數時傳遞參數?
- 4. 將字符串數組傳遞給使用指針的函數
- 5. 如何將字符傳遞給期望字符串的函數
- 6. 將字符串傳遞給jquery函數
- 7. 將字符串傳遞給函數
- 8. 將字符串傳遞給ggplot函數
- 9. 將字符串傳遞給onItemClick函數
- 10. 將字符串傳遞給函數
- 11. 將字符串參數傳遞給構造函數以調用函數
- 12. 如何將python回調傳遞給c#函數調用
- 13. 將字符串傳遞到期望節點的模板參數?
- 14. 如何使用winapis將字符串作爲參數傳遞給C++字符串
- 15. 使用glade將用戶數據傳遞給回調函數
- 16. Java在回調函數中傳遞字符串變量
- 17. Python - 如何將字符串傳遞到subprocess.Popen(使用stdin參數)?
- 18. 如何使用ksoap2將字符串數組傳遞給webservice?
- 19. 如何將字符串參數傳遞到PHP字符串內的JS函數?
- 20. 如何使用節點js串聯管理函數調用
- 21. 如何限制函數的調用者在Haskell中傳遞串聯字符串?
- 22. InnoSetup:如何將二維字符串數組傳遞給函數
- 23. LuaJIT ffi:如何將字符串數組傳遞給c函數
- 24. 如何將參數傳遞給使用setTimeout調用的函數?
- 25. 將html節點傳遞給javascript函數
- 26. 通過引用將字符串數組傳遞給C函數
- 27. Javascript onclick函數調用問題:不會傳遞字符串
- 28. typeof調用函數的名稱作爲字符串傳遞
- 29. C# - 調用JavaScript函數onclick並傳遞字符串
- 30. 如何將錯誤傳遞迴調用函數?
非常感謝,那正是我所需要的。 – alex77 2008-11-06 18:41:03
當使用「C字符串指針」字符串格式時,您的LabVIEW代碼負責預先分配一個足夠大的字符串傳遞給調用庫函數節點,否則您的DLL可能會破壞LabVIEW堆。分配字符串的一種方法是將Initialize Array和Byte Array To String組合起來。 – bk1e 2008-11-07 05:16:28