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

电子说

1.3w人已加入

描述

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

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

dll

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

dll

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

dll

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

dll

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

dll

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

dll dll

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

dll dll

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

dll

7)测试运算正常

dll

审核编辑 黄宇
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分