關於labview通過動態鏈結庫得到乙個指標,怎麼獲取這個指標指向位址的值?

時間 2021-06-08 15:04:51

1樓:Scofield Gu

教程來了~過年正好有空自己也正在整理這個問題,因此我就在此分享一下吧。

舉個例子,我們這裡說的就是這個minus 函式,希望得到int* diff_ptr ,是diff的指標。我們通過解指標間接得到diff。但是有時候外部提供的dll是指標,需要我們再LV中自己解引用,那麼以下有三種辦法可以實現。

//code in headfile

struct minus_struct;

DLLIMPORT void Minus(int* a,int* b,struct minus_struct*ret_val);

// code in c

DLLIMPORT void Minus(int* a,int* b,struct minus_struct* ret_val)

可以看到上圖中,我們給a的輸入是50,b是23,那麼diff就是27。上圖中在dereference output中可以看到dest 和getValueByPointer中以及dll的輸出都是我們預期中的27.

這裡要注意的是moveblock func的設定,我一開始也沒設定對,自己寫的dll的指標也指到區域性變數上了...

address接收i32的指標位址,dest為要解析的位址型別,我們設定為int* ,因為裡面存放的int 變數。最後是size寫為4,代表4個位元組。

這個沒啥好說的,就是簡單的VI ,無腦出結果

值得注意的是,其自由度沒有第一種好,但是第一種方法好像不能生成exe.......不知道NI的人咋想的哈哈哈哈,第二種是可以的。

第三種辦法自己寫dll,你可以用c ,py,etc生成dll解析指標!

dll.h is as follows:

#ifndef _DLL_H_

#define _DLL_H_

#if BUILDING_DLL

#define DLLIMPORT __declspec(dllexport)

#else

#define DLLIMPORT __declspec(dllimport)

#endif

#include

"config.h"

#include

"stdbool.h"

#include

#include

struct

minus_struct

;DLLIMPORT

intHelloWorld

(inta,

intb

);DLLIMPORT

void

Minus

(int*a

,int*b

,struct

minus_struct

*ret_val

);#endif

dll.c is as follows:

/* Replace "dll.h" with the name of your header */

#include

"dll.h"

//DLLIMPORT int HelloWorld(a,b)

//DLLIMPORT

bool

IProperty_GetValue

(int

iproperty

,char

*path

,const

char

*ret_value

)DLLIMPORT

void

Minus

(int*a

,int*b

,struct

minus_struct

*ret_val

)BOOL

WINAPI

DllMain

(HINSTANCE

hinstDLL

,DWORD

fdwReason

,LPVOID

lpvReserved

)case

DLL_PROCESS_DETACH

:case

DLL_THREAD_ATTACH

:case

DLL_THREAD_DETACH:}

/* Return TRUE on success, FALSE on failure */

return

TRUE;}

如果對你有幫助,請給我個小心心,滿足一下我的成就感哈哈哈

如果感興趣,可以追更哦~

動態鏈結庫與靜態鏈結庫有什麼區別?

秀才 動態就是乙個檔案在自己工作的地方,可以重複多次使用的,比如像優秀的導購乙個人可以為6個人同時服務,然而呼叫是複製了N份而不是像CPU或者導購一樣輪詢。靜態就是編譯生成的 不能重複利用 Gavin 靜態庫應該就是和自己的程式編譯在一起的那種庫。動態庫就是不和自己的程式編譯在一起,而是執行的時候才...

西門子PLC與labview之間如何通過OPC進行通訊?

天馬山大軍師 這個問題你解決了嗎?我現在是建立了通過西門子的OPC SCOUT建立起來了連線。然後在labview中呼叫了西門子OPC中建立的變數。可以讀取,在下位機上操作,labview上也可以顯示,但就是沒法通過labview去控制PLC。這個問題困擾了有些天了。硬體條件 s7 300 cp56...

棧幀中的 動態鏈結 作用是什麼?

關於棧幀的動態鏈結與方法解析中的靜態分派與動態分派的的關係,網上的部落格基本都是錯亂的,可以說概念都沒弄清楚。首先要明確沒有靜態鏈結這個東西。然後才是解析,解析只有靜態解析。但是解析又分為類載入的解析與執行期間的解析 再就是分派,區分靜態分派與動態分派。靜態分派對應類載入的解析,動態分派對應執行期間...