如何使用LabVIEW和DLL传递和接受指针
[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)
{
}
所以我们可以知道函式本式回传整数指标,请你在 Type栏位选择” Numeric”,在Data type栏位选择”Signed Pointer-sized Integer”
②以Reference型式回传
我们以下列程式码为例
void ReturningValuesByReferen
{
}
以上的配置方法是直接使用调用库函数节点来实现时需要做的工作。
如果我们采用dll调入生成VI的方式则不需要,因为labview已经给配置好了!
如下图:
这是一个通过dll自动生成的VI,里面也就是一个调用库函数节点的程序,很简单,但是参数已经给配置好了!
如下:
这两种不同的参数类型
LabVIEWDLL指 相关文章:
- labview中dll的调用(包括生成dll)(01-09)
- 频宽、取样速率及奈奎斯特定理(09-14)
- 为什么要进行信号调理?(09-30)
- IEEE802.16-2004 WiMAX物理层操作和测量(09-16)
- 为任意波形发生器增加价值(10-27)
- 基于PCI 总线的高速数据采集系统(09-30)