一、调用C++库
原本比较熟悉Qt 想用Qt 创建个dll给Labview,但是好像测试时,没有用VS创建出来的dll导入那么顺利Qt Creator创建出来的是类,感觉labview对C++类好像导入有点问题,至少我导入时是识别不到类的. 1、记录下创建Qt库的过程,我这边是32位的labview 所以选择32位的dll ![在这里插入图片描述](https://img-blog.csdnimg.cn/c6a512fee7a044b598adc160ed49d9aa.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/8eba84a1f01c46e7a94935c53f61d641.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/168455690d2a4a0790100a7b0e3c34ba.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16) 默认的dll文件会创建一个类出来,这个类导入labview 是识别不出来的,需要将类去除直接修改成函数去调用。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/0e234192ddd24ac885661509dd8b7624.png) cpp修改成入下
#include "qdllcore.h"
int QSumInt(int num1, int num2)
{
return num1 + num2;
}
.h文件修改如下
#ifndef QDLLCORE_H
#define QDLLCORE_H
#include "qdllcore_global.h"
QDLLCORE_EXPORT int QSumInt(int num1, int num2);
#endif
然后编译生成dll文件在debug里,出错不需要管(因为dll没有法直接运行) ![在这里插入图片描述](https://img-blog.csdnimg.cn/2a968d8cd28b4302bbfb866c7cdfb953.png) 测试dll 找个例子拖动2个输入数值控件一个输出测试以下加减法 ![在这里插入图片描述](https://img-blog.csdnimg.cn/3caaf15b000e47bfb5052b55c8ad2596.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_19,color_FFFFFF,t_70,g_se,x_16) 拖成这个样子
![在这里插入图片描述](https://img-blog.csdnimg.cn/7b788133ca9a42f8bf8d944f321e58ae.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16) 更换箭头工具双击进入后面板导入对应的库,空白区域右键拖入 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6bc06bdfbda94f429b7dd4990488c65b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_17,color_FFFFFF,t_70,g_se,x_16) 拖入后双击调用函数节点,然后选择对应的dll文件,识别完修改对应的函数输入输出映射 ![在这里插入图片描述](https://img-blog.csdnimg.cn/cb41b56c65554601965977c2ab7c65ca.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16) 这个参数需要手动的选择 ![在这里插入图片描述](https://img-blog.csdnimg.cn/055c3286119c47b9b3314d4cb685a753.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/d7810f9a4b96451b9bb6434c16620929.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16) 选择完点击确定就剩下连接线了 ![在这里插入图片描述](https://img-blog.csdnimg.cn/a08f36d47a4241fa9c5f677614e13d41.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_19,color_FFFFFF,t_70,g_se,x_16) 然后点击运行就成功了。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/eab7fa99567345d8b4256a7ccc215fe1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16)
二、用同样的方法测试下VS下创建的C++库(连线就省略了)
C++库调用都一样,就是VS创建动态dll有区别 ![在这里插入图片描述](https://img-blog.csdnimg.cn/751d22d8d8934ceea759ea8bf5c977c1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16) 创建完后生成默认的几个文件 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d35c7b0ae16240ab8221181906b928fd.png) 自己添加个.h和.cpp文件,敲入代码 .h文件
extern "C" __declspec(dllexport) int SumInt(int num1, int num2);
.cpp文件
#include "pch.h"
#include "dllapi.h"
int SumInt(int num1,int num2)
{
return num1 + num2;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/861163765670493fb161da5c80c8480c.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/15341121636d495d995f053e218e8beb.png) 编译出dll文件完和Qt加载dll一样创建个空白VI,拖动对应的空间,最后加载dll 反正VS创建完没有乱码,感觉比较舒服
![在这里插入图片描述](https://img-blog.csdnimg.cn/ba16671d96af40dab4f4b70c1b3f7229.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/b91e0f6fb73648fcba4d94c23123e515.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_18,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/79f851acb5354f8ba984aeca0dd60591.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16) 运行也正常
三、C# 的.net dll
看labview 官网是说对.net 支持会比较好。所以就搞个.net库来试试。 一样新建.net的dll文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/a41133dd584b46dc87eea8ec01ab3adc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16) 创建.net库工程,名字自行命名。没有头文件比较简单 搞个方法放进去
public class DllApi
{
public double add(double a, double b) {
return a + b;
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/7bbcc634344648a1abea2ee7cb646675.png) 编译出dll报错无需理会 ![在这里插入图片描述](https://img-blog.csdnimg.cn/87305daca6fc4975be7307b1523e2955.png) 拖入面板还是一样的控件 ![在这里插入图片描述](https://img-blog.csdnimg.cn/974ddd49eb2a46ab85e6055c53c02af7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_16,color_FFFFFF,t_70,g_se,x_16) 转到背板后,拖动出对应的节点,因为C#可以导入类,所以还需要从类里面导入方法。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/84dbf6f32e92491dba85ad6eec7a01e7.png) 再对应的拖入方法 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5081af40d6194b15a174ee3a95f2ab41.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/7169ca016291434b8f22b1ade39624b6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16) 然后去方法那边选择方法 ![在这里插入图片描述](https://img-blog.csdnimg.cn/a248c8b20376458b9d4a3c264b133166.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16) 连接对应的连接线运行,和前面两个都一样,但是C#感觉支持比较舒服,还能导入控件什么的 ![在这里插入图片描述](https://img-blog.csdnimg.cn/ac0fa8b4a30d4932afb65d1eb28bb8ff.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyqKuacmw==,size_20,color_FFFFFF,t_70,g_se,x_16)
四、总结
VS 创建出来的C++ dll 和QT 创建出来的C++dll VS兼容比较好,函数名称可以看得清楚(预计是QT的编码格式问题),但是两个函数都是正常使用的,.net 创建的dll 很好的兼容,而且自定义控件也是可以拉入的,也可以导入C#的类,和属性。整体兼容比较舒服
|