NI LabVIEW,CVI,数据采集等产品讨论区

cancel
Showing results for 
Search instead for 
Did you mean: 

使用CLFN传入DLL的参数中有结构体数组,该如何正确传入?

Solved!
Go to solution

一开始自己试了很久,也查询了许多论坛的类似帖子,但还是没有弄懂。事情是这样的,我需要调用一个DLL中的一个函数:

void WINAPI EnumDevice(ULONG scanTimes, PCHAR DevNameFilter, NameDevID* pNameDevIDArry, PULONG pNum);
而其中的 “NameDevID” 是一个结构体,定义如下:
struct NameDevID
{
	UCHAR Name[MAX_PATH];
	UCHAR DevID[MAX_PATH];
	int  Rssi;
};

但需要传入的参数是该结构体所构成的数组,于是我根据网上的教程先用簇装上两个字符串和一个int型,再使用数组包住簇,类似如下这样:

k_ying_0-1617521704932.png

在CLFN里的是这样设置的:

k_ying_1-1617521810745.png

因为我发现教程里的“按值传递”会导致崩溃,所以使用了数组数据指针,但使用这个方法也会报错(error code:1097),而且无论如何也得不到该参数经DLL处理之后传出的值;而其他的参数能得到返回值。

我查了挺多类似帖子,感觉想解决的问题跟我都不太一样。

如:类似帖子1 类似帖子2 

---------------------------------------------------------------------------------------------

环境:LABVIEW2020 32bit in Windows10 64bit PC

如能解决我的疑惑,感激不尽!

0 Kudos
Message 1 of 2
(130 Views)
Solution
Accepted by topic author k_ying

象这样复杂的数据结构(array of cluster of multiple items)是很困难的.

我的方法是: 在 LabVIEW 中配置成最方便的,最简单的数据结构, 然后右击 CLFN, 选 Create C File.

用 VC 把这个 C 文件生成一个新的 dll 给 LabVIEW 调用.

用这个 C 文件调用原来的 dll, 把 LabVIEW 中输入的参数转给 dll.

image.png

George Zou
0 Kudos
Message 2 of 2
(80 Views)