Labview调用DLL库的问题


typedef struct
{
    int intElement;
    char* stringElement;
    int intElement1;
}test1;

typedef struct
{
    int nNum;
    test1* b;
}test2;

extern "C"{
    __declspec(dllexport) int __stdcall setNum(test2* clusterArray)
    {
        clusterArray->nNum = 2;
        for (int i = 0; i < clusterArray->nNum; i++) {

            clusterArray->b[i].stringElement = (char*)malloc(10 * sizeof(char));

            strcpy(clusterArray->b[i].stringElement, "Hello");

            clusterArray->b[i].intElement = i + 1;
        }
        return 1;
    }
}

类似这样的库函数,labview该如何设计呢?

或者

图片中的labview该怎么设计c库呢?

你需要确定你的c库是动态链接库(DLL)还是静态链接库(LIB)。labview可以调用DLL,但不能直接调用LIB。如果你的c库是LIB,你需要将它转换为DLL,或者使用一个包装器DLL来调用它

采用结构和指向结构的指针的函数的调用库函数节点配置。传递指向结构的指针,可以将表示结构的群集作为“适应类型”输入传递,其数据格式设置为“按值处理”。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7402892
  • 这篇博客也不错, 你可以看下Labview调用Dll 数据类型映射
  • 您还可以看一下 刘旭东老师的LabVIEW通用视觉直播课课程中的 labview通用视觉的直播小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    LabVIEW中可以通过调用DLL库来使用库函数。下面是一个示例代码,展示了如何在LabVIEW中调用DLL库以及如何传递参数和获取返回值。

    步骤1: 创建一个新的VI (Virtual Instrument)

    步骤2: 在VI界面上添加Call Library Function Node - 点击LabVIEW工具栏上的"Function"选项,选择"add"。 - 在弹出的对话框中填写函数的信息。例如,对于上面的add函数,填写以下信息: - Library Name: 选择DLL库文件所在的路径或者选择已知库 - Function Name: 输入要调用的库函数名称。例如,add。 - Calling Convention: 选择"C"。 - 返回类型: 选择I32。 - 将该函数的返回值连接到需要显示的输出控件。

    步骤3: 添加输入参数 - 右键点击Call Library Function节点,选择"Create Constant"或者"Create Control"。 - 输入参数设置为所需的值,然后将它们连接到Call Library Function节点的输入端口。

    步骤4: 执行VI - 点击运行按钮或者按下Ctrl+R运行VI。

    这样,LabVIEW就会调用指定的函数,并将返回值显示在输出控件上。

    以下是使用LabVIEW调用示例库函数add_array的代码示例:

      ![示例代码](https://labview360.com/attachments/download/8212)
    

    注意:具体的代码实现可能因为每个人的需求和环境而有所不同,请根据自己的实际情况进行相应的调整。 如果以上解决方案不能解决您的问题,请在问题标题为:"LabVIEW不能调用DLL库"的新问题中提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

对于调用DLL的问题,必须确定该库是C / C ++ DLL还是Microsoft .NET Assembly / .NET DLL。如果函数不包含任何复杂的数据类型,并且具有头文件(* .h文件),则可以使用导入共享库向导创建一个包含该头文件中的函数的LabVIEW库。可以在工具»导入»共享库(.dll)…中找到该选项。继续执行向导。
具体可以参考:https://zhuanlan.zhihu.com/p/576916774

LabVIEW调用动态链接库DLL
可以参考下
https://blog.csdn.net/bjcyck/article/details/129887809

首先,通过编译C代码,生成一个动态链接库(.dll或.so文件),然后,根据该库函数的输入参数和返回值,在LabVIEW中设置Function节点的输入和输出数据类型,以及连接适当的LabVIEW模块进行数据处理和显示。关于您提到的"图片中的LabVIEW"的设计问题,如果有特定的图片或设计示例,请提供更多细节

以下答案参考newbing,回答由博主波罗歌编写:
在LabVIEW中调用C函数和使用DLL库的过程如下:

步骤1:创建一个新的LabVIEW项目
首先,打开LabVIEW并创建一个新的项目。

步骤2:创建一个C函数的声明
在项目中,右键点击"Functions"文件夹,选择"Add",然后选择"CIN declaration"。

这将打开C函数声明对话框。在对话框中,输入函数的名称(例如"setNum")、返回类型(int),并添加输入参数(test2* clusterArray)。

填写完毕后,点击"OK"。

步骤3:创建一个CIN模块
在项目中,右键点击"CINs"文件夹,选择"Add",然后选择"CIN module"。

这将打开一个空的CIN模块。右键点击CIN模块的编辑区域,选择"Add Function"。

在弹出的对话框中,选择之前创建的C函数的声明。点击"OK"。

步骤4:实现C函数
在CIN模块的编辑区域中,找到之前选择的C函数声明。在该函数的代码块中,实现C函数的具体功能。

参考你给出的C函数,可以使用LabVIEW提供的内存分配和字符串函数来实现。

下面是一个示例的C函数代码:

#include <stdlib.h>
#include <string.h>

typedef struct
{
    int intElement;
    char* stringElement;
    int intElement1;
}test1;

typedef struct
{
    int nNum;
    test1* b;
}test2;

__declspec(dllexport) int __stdcall setNum(test2* clusterArray)
{
    clusterArray->nNum = 2;
    clusterArray->b = (test1*)malloc(clusterArray->nNum * sizeof(test1));

    for (int i = 0; i < clusterArray->nNum; i++) {
        clusterArray->b[i].stringElement = (char*)malloc(10 * sizeof(char));
        strcpy(clusterArray->b[i].stringElement, "Hello");
        clusterArray->b[i].intElement = i + 1;
    }
    return 1;
}

步骤5:将CIN模块编译为DLL库
在LabVIEW的工具栏中,点击"Build",然后选择"CIN to DLL"。

这将打开一个对话框,用于选择输出文件的名称和位置。

点击"OK",LabVIEW将根据您的选择编译CIN模块,并生成一个DLL库文件。

步骤6:在LabVIEW中调用DLL库
创建一个新的VI,并打开Block Diagram。

在Block Diagram中,使用"Call Library Function Node"来调用DLL库中的函数。

右键点击Block Diagram,选择"Functions Palette",然后选择"Call Library Function Node"。

将该节点从Functions Palette拖放到Block Diagram中。右键点击该节点,选择"Configure"。

在配置对话框中,选择之前生成的DLL库文件,并选择需要调用的函数(setNum)。

点击"OK"。

连接合适的输入和输出节点到Call Library Function Node,以便将数据传递给C函数,并从C函数中获取结果。

通过设置适当的数据类型和数据结构,确保与C函数的参数和返回值的类型匹配。

最后,运行LabVIEW程序,即可使用C函数和DLL库。

希望以上步骤对您有所帮助!
如果我的回答解决了您的问题,请采纳!

基于new bing部分指引作答:
在LabVIEW中调用DLL库可以通过以下步骤进行设计:

1、打开LabVIEW,并创建一个新的VI。
2、在Block Diagram中,使用"Call Library Function Node"来调用DLL库函数。可以在Functions面板中搜索并找到这个节点。
3、双击"Call Library Function Node",打开其属性对话框。
4、在属性对话框中,选择"Function"选项卡。
5、在"Library name or path"字段中,输入DLL库的路径或者使用"Browse..."按钮选择DLL库文件。
6、在"Function name"字段中,输入要调用的函数名,这里是"setNum"。
7、在"Parameters"字段中,配置输入和输出参数。
输入参数:点击"Add..."按钮,选择输入参数的数据类型和名称。根据给定的DLL库函数,输入参数是一个指向"test2"结构体的指针,因此选择"Pointer to Data"作为参数类型,并将其命名为"clusterArray"。
输出参数:在"Return Type"字段中选择返回值类型,这里是"int"。如果有其他输出参数,可以使用"Add..."按钮添加它们。
8、单击"OK"以关闭属性对话框。
9、连接适当的LabVIEW数据流线和控制线,以将输入数据传递给DLL库函数,并接收返回的结果。
10、运行LabVIEW VI,即可调用DLL库函数并获取结果。
注意:在将结构体传递给DLL库函数之前,需要在LabVIEW中定义相应的数据类型。你可以使用LabVIEW的"Type Def"功能来定义与DLL库中的结构体相匹配的数据类型。