0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LabVIEW调用C#编写的.NET类库

lvxisi 来源:lvxisi 作者:lvxisi 2023-09-06 17:43 次阅读

LabVIEW的无法直接完成向dll中传入回调函数,需要用其他语言编写包装器来实现。因此,可利用C#编写包装器,编写中间转换的程序,并生成.NET类库,将底层包含回调函数的dll与LabVIEW连接起来。

本文主要是LabVIEW无法调用回调函数dll的问题的解决方法,也介绍了LabVIEW调用C#库的方法。

wKgZomT4SIuAZIG5AAAbLu2RvX0226.png

1)选择“类库(.NET Framework)”(不要选择类库,那个是.NET Core/.NET 5+版本,兼容性有问题)

wKgZomT4SJyASFeTAAE6pxj331g611.png

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< int, int, int >? 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中进行加载。选择构造器节点。

wKgaomT4SCiAFa6-AAIqIRN8trY120.png

双击构造器节点,选择浏览

wKgaomT4SCeAWniIAACse7Xd72g026.png

4)选择生成的库文件。(注:注意调用的底层dll,要放在同一目录下。此处是为了实现调用底层MyCallback.dll,如果仅为了调用.NET类库,可忽略)

wKgZomT4SCiANIG7AABr2a5L6uQ583.png

选择要调用的类,此处是MyCSharpWrapper,与代码相对应。

wKgZomT4SdmAYwLlAAB4ssAjV68005.pngwKgZomT4SCeAQCU6AADvv_oEZCs782.png

5)在后方连接调用节点,可以选择要执行的方法。

wKgZomT4SCeAfg2eAACzKpTQwDE097.pngwKgZomT4SCeAJcCAAACKtun2iKE551.png

6)编写相关的程序,初始化程序用于判断底层dll的执行情况,SetCallback调用底层的dll并注册回调函数,ReadData中设置相关参数,触发回调函数并获得计算的返回值。

wKgaomT4SCiANpmgAACZFvui4MM675.png

7)测试运算正常

wKgZomT4SCiADt1fAAA6cTrzSks649.png

审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 测试
    +关注

    关注

    8

    文章

    5149

    浏览量

    126437
  • dll
    dll
    +关注

    关注

    0

    文章

    115

    浏览量

    45374
  • LabVIEW
    +关注

    关注

    1962

    文章

    3652

    浏览量

    322293
  • net
    net
    +关注

    关注

    0

    文章

    125

    浏览量

    56133
收藏 人收藏

    评论

    相关推荐

    Qt创建动态C#调用,通过回调完成交互

    在windows下做应用开发时,经常需要多种不同的语言混合编程。比如:利用Qt开发一个动态,给C#调用。 当前的需求是: 利用Qt开发一个工具,给
    的头像 发表于 09-09 11:37 4502次阅读
    Qt创建动态<b class='flag-5'>库</b>给<b class='flag-5'>C#</b><b class='flag-5'>调用</b>,通过回调完成交互

    LabVIEWC# 注册事件相关方法

    利用C#编写事件相关的,在WinForm和LabVIEW中进行测试,并描述相关程序的调用方法
    的头像 发表于 10-09 17:48 2279次阅读
    <b class='flag-5'>LabVIEW</b>与<b class='flag-5'>C#</b> 注册事件相关方法

    LabVIEW程序中包含.netC++dll的注意事项简介

    LabVIEW的VI调用.NET程序集或者C++动态链接时的关系图如下
    的头像 发表于 12-11 09:22 1279次阅读
    <b class='flag-5'>LabVIEW</b>程序中包含.<b class='flag-5'>net</b>和<b class='flag-5'>C</b>++dll的注意事项简介

    labview 调用.net 问题

    labview 调用.net ,在开发坏境中OK,生成exe不行。这个需要如何操作?
    发表于 03-11 17:25

    c#采集程序中调用NI采集卡?

    各位大神好,我现在编写c#的采集程序,怎样导入NI9215采集卡的动态链接啊?官网都是支持labview平台的驱动,有支持c#.net
    发表于 11-25 11:37

    C#与LbVIEW混合编程

    演示了如何使用VS开发环境用C#编写一个dll文件,dll包含2个,其中第一个中有2个方法,一个数字加法,一个字符串连接。并且演示了如何在Lab
    发表于 04-11 21:48

    LABVIEW通过C#调用halcon算子

    用VS创建键入这些代码,点击生成解决方案,在VS的项目目录下\bin\Debug文件夹里会生成一个DLL。打开LABVIEW-互联接口-.NET-构造器节点,创建一个构造器然后
    发表于 02-18 10:54

    Labview 调用C#封装halcon

    Labview 调用C#封装halcon,内存释放能做到最好
    发表于 08-30 15:37

    labview 动态调用 C# 生成的dll

    目的: 用labview动态调用C#生成的dll问题:目前知道可以用.net的构造器调用,但是该方式不像“
    发表于 01-04 15:47

    C# 调用labview导出的 .net assembly 时出现的异常问题

    ],这个工具包我也已经安装了,可以使用labview查看vi的完整程序框图,但是导出成.net dll之后,使用C#编写调用
    发表于 08-07 14:55

    C# 调用Labview生成的.NET指令集报错

    1.如题,C#调用Labview生成的.NET指令集报错。错误内容为:未能加载文件或程序集“NationalInstruments.LabVIEW
    发表于 03-08 16:54

    labview连接mongdb问题,找到不.NET中的泛型

    有没有人用labview连接mongodb数据的?已下载mongodb的c#驱动,利用labview中的.net控件
    发表于 04-08 13:38

    C#知识

    C#知识:C#注释符.txt编辑器技巧.txt窗体加载错误码.txt如何设置Path.txt如何在IDE输入命令行参数.txt显示行号.txt重新向IIS注册asp.
    发表于 12-26 12:14 53次下载
    <b class='flag-5'>C#</b>知识<b class='flag-5'>类</b><b class='flag-5'>库</b>

    LabVIEW网络讲坛第四季:VI编译成.NET共享文件带来的好处

    本集为大家介绍了LabVIEW2009中的一个新功能:将VI编译成.NET共享文件。通过这种方法,.NET用户可以很方便的在C#等环境中
    的头像 发表于 06-22 13:19 3446次阅读
    <b class='flag-5'>LabVIEW</b>网络讲坛第四季:VI编译成.<b class='flag-5'>NET</b>共享<b class='flag-5'>库</b>文件带来的好处

    LABVIEW调用C# DLL的实例分享

    LABVIEW调用C# DLL的实例分享
    发表于 01-04 11:20 105次下载