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

    文章

    4448

    浏览量

    125123
  • dll
    dll
    +关注

    关注

    0

    文章

    113

    浏览量

    45016
  • LabVIEW
    +关注

    关注

    1918

    文章

    3619

    浏览量

    316992
  • net
    net
    +关注

    关注

    0

    文章

    123

    浏览量

    55726
收藏 人收藏

    评论

    相关推荐

    LabVIEWC# 注册事件相关方法

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

    北大青鸟accp5.0 C#教程课件(最新版)

    课程目标学完本门课程后,你能够:运用 C# 编写 .NET 命令行程序运用 C#/WinForms 编写 .
    发表于 09-27 23:02

    labview 调用.net 问题

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

    LabVIEW调用visual studio C#生成的动态链接dll文件

    1)visual studio C#生成动态链接dll文件2)LabVIEW通过构造器调用C#的dll文件
    发表于 07-23 23:18

    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调用.NET实现波形图打印

    直接调用),然后调用.NET相关函数实现打印预览;主要参照C#例子来写的,因为labview在这块资料实在太少;这中间遇到几个难点:1、如何
    发表于 05-09 17:40

    Labview 调用C#封装halcon

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

    labview调用C# dll文件如何传递ArrayList类型参数?

    labview调用C# dll文件时,没有找到有效的ArrayList类型参数传递方式。尝试过强制类型转换、调用库函数节点均未能实现(可能
    发表于 10-13 09:18

    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

    LABVIEW调用C# DLL的实例分享

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