欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LabVIEW调用C++动态库时异常崩溃

程序员文章站 2024-03-20 17:02:16
...

LabVIEW调用C++写的动态库dll时,总是容易崩溃,一般都是传入参数类型不匹配或者分配内存大小不足,导致访问越界。
如下方DLL中的函数传入传出参数为结构体,并且结构体中包含字符数组,需要创建一个同等大小的簇传入才行。

struct MyStruct
{
    int a;
    char buf[512];
};

void __stdcall GetString(MyStruct *s)
{
    s->a = 100;
    strncpy(s->buf, "hello everyone", sizeof(s->buf));
}

1. 在程序框图中右键选择"互连接口->库与可执行程序->调用库函数节点"。

LabVIEW调用C++动态库时异常崩溃

2. 选择DLL库路径和函数名,设置调用规范跟函数代码一致;

LabVIEW调用C++动态库时异常崩溃

3. 添加函数参数,设置结构体参数类型为“匹配至类型”,数据格式为“按值处理”。

LabVIEW调用C++动态库时异常崩溃

4. 使用“数组至簇转换”为结构体参数分配同等大小的内存空间。

LabVIEW调用C++动态库时异常崩溃

注意: 由于在使用“数组至簇转换”时没有设置簇大小,默认簇大小只有9,导致调用dll时崩溃,查了很久才发现是此处给簇分配的内存不足,调用dll时会赋值越界,导致崩溃。

LabVIEW调用C++动态库时异常崩溃