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. 在程序框图中右键选择"互连接口->库与可执行程序->调用库函数节点"。
2. 选择DLL库路径和函数名,设置调用规范跟函数代码一致;
3. 添加函数参数,设置结构体参数类型为“匹配至类型”,数据格式为“按值处理”。
4. 使用“数组至簇转换”为结构体参数分配同等大小的内存空间。
注意: 由于在使用“数组至簇转换”时没有设置簇大小,默认簇大小只有9,导致调用dll时崩溃,查了很久才发现是此处给簇分配的内存不足,调用dll时会赋值越界,导致崩溃。
推荐阅读