一、调用C++库
原本比较熟悉Qt 想用Qt 创建个dll给Labview,但是好像测试时,没有用VS创建出来的dll导入那么顺利Qt Creator创建出来的是类,感觉labview对C++类好像导入有点问题,至少我导入时是识别不到类的. 1、记录下创建Qt库的过程,我这边是32位的labview 所以选择32位的dll    默认的dll文件会创建一个类出来,这个类导入labview 是识别不出来的,需要将类去除直接修改成函数去调用。  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没有法直接运行)  测试dll 找个例子拖动2个输入数值控件一个输出测试以下加减法  拖成这个样子
 更换箭头工具双击进入后面板导入对应的库,空白区域右键拖入  拖入后双击调用函数节点,然后选择对应的dll文件,识别完修改对应的函数输入输出映射  这个参数需要手动的选择   选择完点击确定就剩下连接线了  然后点击运行就成功了。 
二、用同样的方法测试下VS下创建的C++库(连线就省略了)
C++库调用都一样,就是VS创建动态dll有区别  创建完后生成默认的几个文件  自己添加个.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;
}
  编译出dll文件完和Qt加载dll一样创建个空白VI,拖动对应的空间,最后加载dll 反正VS创建完没有乱码,感觉比较舒服
   运行也正常
三、C# 的.net dll
看labview 官网是说对.net 支持会比较好。所以就搞个.net库来试试。 一样新建.net的dll文件
 创建.net库工程,名字自行命名。没有头文件比较简单 搞个方法放进去
public class DllApi
{
public double add(double a, double b) {
return a + b;
}
}
 编译出dll报错无需理会  拖入面板还是一样的控件  转到背板后,拖动出对应的节点,因为C#可以导入类,所以还需要从类里面导入方法。  再对应的拖入方法   然后去方法那边选择方法  连接对应的连接线运行,和前面两个都一样,但是C#感觉支持比较舒服,还能导入控件什么的 
四、总结
VS 创建出来的C++ dll 和QT 创建出来的C++dll VS兼容比较好,函数名称可以看得清楚(预计是QT的编码格式问题),但是两个函数都是正常使用的,.net 创建的dll 很好的兼容,而且自定义控件也是可以拉入的,也可以导入C#的类,和属性。整体兼容比较舒服
|