LabVIEW調用C++動態庫時異常崩潰

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時會賦值越界,導致崩潰。

數值轉簇

 

發佈了10 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章