LabVIEW調用C++寫的動態庫dll時,總是容易崩潰,一般都是傳入參數類型不匹配或者分配內存大小不足,導致訪問越界。
如下方DLL中的函數傳入傳出參數爲結構體,並且結構體中包含字符數組,需要創建一個同等大小的簇傳入才行。
struct MyStruct
{
int a;
char buf[512];
};
void __stdcall GetString(MyStruct *s)
{
s->a = 100;
strncpy(s->buf, "hello everyone", sizeof(s->buf));
}
1. 在程序框圖中右鍵選擇"互連接口->庫與可執行程序->調用庫函數節點"。
2. 選擇DLL庫路徑和函數名,設置調用規範跟函數代碼一致;
3. 添加函數參數,設置結構體參數類型爲“匹配至類型”,數據格式爲“按值處理”。
4. 使用“數組至簇轉換”爲結構體參數分配同等大小的內存空間。
注意: 由於在使用“數組至簇轉換”時沒有設置簇大小,默認簇大小隻有9,導致調用dll時崩潰,查了很久才發現是此處給簇分配的內存不足,調用dll時會賦值越界,導致崩潰。