微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 测试测量 > Labview > 如何使用LabVIEW和DLL传递和接受指针。

如何使用LabVIEW和DLL传递和接受指针。

时间:10-02 整理:3721RD 点击:

虽然我们都知道要使用 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;
}

由程式可知,运算后的资料会放在*sum当中,所以请你在Data type栏??位中选择”Pointer to Value”即可,如下图所示。




这是哪一版labview?我的就没有这么多选项。处理指针真是个头疼的事

蛮不错,我正要用到

byte*怎么弄?DLL,往labview写数据

非常有用 谢谢....

收藏了,很有用

写得棒极了。。

非常不错的资料,收藏了。

很好的说,正好要用到,谢谢

学习了  谢谢。

谢谢小编分享 受用

受教。

十分感谢小编,谢谢啦!

真正是入门容易,深入难

刚做DLL方面的工作,有什么指导性的资料可以发一份吗?我现在根据DLL生成了VI,但接下来怎么应用 ,没有头绪,能给点指导意见吗?

写的很好,谢谢你

写的挺详细

谢谢分享,学习中

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top