您的位置 首页 芯闻

怎么运用LabVIEW和DLL传递和承受指针

虽然我们都知道要使用CallLibraryFunctionNode去载入DLL,但一遇到指针(Pointer)还真不知道该怎么设定?[Answer]指针(Pointer)是

尽管咱们都知道要运用 Call Library Function Node去载入DLL,但一遇到指针(Pointer)还真不知道该怎样设定?

[Answer]

指针 (Pointer)是在C语言中很重要的一种材料型态,并且是被广泛的被运用,所以当要用LabVIEW去呼叫C/C++所开发的DLL时,一定会遇到指针的问题,接着我会以传递及接纳目标这两个方向来阐明。

一、传递指针到 DLL

①传递整数 (Integer)目标

假如以下是咱们呼叫的函式

void ReturningValues​​ByReference_Integer(int x, int y, int *sum);

咱们要将材料传递到 *sum中,所以请在Data type栏位挑选”Signed 32-bit Integer”,然后在Pass栏位挑选”Pointer to Value.

②传递阵列 (Array)材料

咱们以下列函式为例

int PassingParamters_ArrayOfIntegers (int x[], int len​​gth);

咱们要将材料传递到阵列,此刻也要运用目标的办法来传,请你在 Type栏位挑选”Array”,Data type栏位挑选”Singed 32-bit Integer”,Array format栏位挑选”Array Data Pointer”.

③传递字串(String)目标

以下列函式为例

int PassingParamters_String (char *str);

当咱们要将材料传递到 *str中,请你在String format栏位挑选”C String Pointer”

④传递结构(Struct)材料

以下例函式为例

void ReturningValues​​ByReference_SimpleStruct (struct simpleStructCircle circle, struct simpleStructCircle *largerCircle);

假如是传递结构的话,只需求将本来结构中的内容依序传入即可,以本函式为例 ”circle” 中含有三个浮点数分别是 x, y, radius,所以只需依序宣告即可,但若是遇到结构目标,请你在 Type 栏位挑选 ”Adapt to Type” , Data format 栏位挑选”Handles by Value”,如下图所示。

二、从 DLL接纳目标

①函式回传目标

假如函式程式码如下

int * ReturnAValue_PointerToInteger(void)

{

int *x = (int *) malloc(sizeof(int));

*x = 5;

return x;

}

所以咱们能够知道函式本式回传整数目标,请你在 Type栏位挑选” Numeric”,在Data type栏位挑选”Signed Pointer-sized Integer”

②以Reference型式回传

咱们以下列程式码为例

void ReturningValuesByReference_Integer (int x, int y, int *sum)
{
//sum is a pointer
*sum = x + y;
}

以上的装备办法是直接运用调用库函数节点来实现时需求做的作业。

假如咱们选用dll调入生成VI的办法则不需求,由于labview现已给装备好了!

如下图:


这是一个经过dll主动生成的VI,里边也便是一个调用库函数节点的程序,很简单,可是参数现已给装备好了!

如下:


这两种不同的参数类型 在传递那个选项里不同,正如本文所述。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/210993.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部