labview的无法直接完成向dll中传入回调函数,需要用其他语言编写包装器来实现。因此,可利用c#编写包装器,编写中间转换的程序,并生成.net类库,将底层包含回调函数的dll与labview连接起来。
本文主要是labview无法调用回调函数dll的问题的解决方法,也介绍了labview调用c#库的方法。
1)选择“类库(.net framework)”(不要选择类库,那个是.net core/.net 5+版本,兼容性有问题)
2)在.cs文件里面,编写程序。
using system;using system.runtime.interopservices;namespace classlibrary1{ public delegate void callbackfunction(int a, int b, ref int sum); public class mycsharpwrapper { private action? triggercallback = null; //从底层dll中,获取相关函数 [dllimport(mycallbacks.dll, callingconvention = callingconvention.cdecl)] private static extern int initialize(); [dllimport(mycallbacks.dll, callingconvention = callingconvention.cdecl)] private static extern void registercallback(callbackfunction callback); [dllimport(mycallbacks.dll, callingconvention = callingconvention.cdecl)] private static extern void triggercallback(int a, int b, ref int sum); [dllimport(mycallbacks.dll, callingconvention = callingconvention.cdecl)] private static extern void sum(int a, int b, ref int sum); public int initializewrapper() { //查看底层dll的执行状态,正常执行时,返回1 return initialize(); } public void setcallback() { // 注册回调函数 registercallback(mycallback); triggercallback = (a, b, result) = > triggercallback(a, b, ref result); } public int readdata(int a, int b) { //触发设置参数,触发回调函数,获取返回值 int result = 0; triggercallback!(a, b, result); return result; } public int testsum(int a, int b) { //用于替代回调函数,测试生成的类库是否可以执行 int result = 0; sum(a, b, ref result); return result; } private void mycallback(int a, int b, ref int sum) { // 传入的回调函数 sum = a + b; } }} 3)生成dll后,在labview中进行加载。选择构造器节点。
双击构造器节点,选择浏览
4)选择生成的库文件。(注:注意调用的底层dll,要放在同一目录下。此处是为了实现调用底层mycallback.dll,如果仅为了调用.net类库,可忽略)
选择要调用的类,此处是mycsharpwrapper,与代码相对应。
5)在后方连接调用节点,可以选择要执行的方法。
6)编写相关的程序,初始化程序用于判断底层dll的执行情况,setcallback调用底层的dll并注册回调函数,readdata中设置相关参数,触发回调函数并获得计算的返回值。
7)测试运算正常
悬念AR引猜想,小狗电器AWE展示未来科技
宁德时代总市值跌破万亿,创本轮调整新低
LM3875的单电源供电音频功率放大电路
工程师玩万圣节,动手打造几款搞怪DIY
看清新能源汽车及电池材料产业布局
LabVIEW调用C#编写的.NET类库
FPGA在测试系统中有哪四种典型应用
AI技术应用线上商品销售,可售商品从70万猛增到6000万!
什么是绿色智能制造
电动汽车市场正处于“深度阵痛期”,,高合HiPhi X却高调上市
诺基亚针对戴姆勒及其供应商提起诉讼
再谈关于PID码的应用
马云表示:建立全国24小时,世界72小时的全国智能物流骨干网
如何使用Electric Imp创建自己的智能灯
宝马将配备增强现实系统 未来汽车已来
燧原科技获Pre-A轮融资3.4亿,打造云端深度学习训练平台
美国对华为封锁没放松,阻止含美国技术产品运往华为
调整互联网结算标准将会带来什么影响
间歇性可再生能源融入电网的方法—技术指南
什么原因导致汽车芯片短缺又如何缓解此现象