概述
labview生成DLL以及C#对其调用
1:制作labview dll文件
1.1 打开labview,创建一个项目,在一个新VI 上做一个2个数相加输出一个值。如下图:
1.2 在前面板中放入2个输入控件作为输入和1个输出控件作为显示,并且分别为三个控件进行接线板操作。
1.3 跳转到程序框图界面,进行连接
1.4 点击程序生成规范>>右键>>新建>>.Net互动操作程序集,如下图:
1.5 选择源程序,选中.vi文件进行导出
1.6 进行参数设置
将返回值设置为z,输入参数为x,y,然后删除z,确定>>生成,现在.dll文件已经生成好了。
2:使用C#调用生成的.dll文件
2.1 打开VS2015,创建新的窗体文件,在Form1窗体中创建Button和TextBox控件
2.2 点击引用>>添加引用,找到保存dll的位置,进行添加
2.3 双击InteropAssembly,进入查看其方法(函数模型)
2.4 进入Form1代码,添加命名空间:InteropAssembly
using InteropAssembly;
在button按钮的代码中输入:
Double dd = LabVIEWExports.add(100, 100);//add为dll生成的函数
this.textBox1.Text = dd.ToString();
结果:
3:补充(来自:此博客)
也可以使用下列写法调用DLL
[DllImport("xxx.dll"),DllImportAttribute]// 你的某个Dll
public static extern int 函数名(参数1,参数2,...);
这里告诉编译器我们需要调用的Dll名称及其对应的方法定义
使用“extern”关键字来标识这个方法是从外部引用
DllImportAttribute是一个重要的角色,其主要作用是给CLR指示哪个Dll是需要调用的外部库,主要包含以下字段:
Entrypoint
入口点,用于标识函数在Dll中的位置。
你可以将入口点映射到一个不用的名称,这实际上就是将被调用的函数重命名。
这里也说明以下重命名Dll函数的可能原因
- 避免使用区分大小写的API函数名
- 符合现行的命名标准
- 提供采用不同数据类型的函数(通过声明同一Dll函数的多个版本)
- 简化对包含ANSI和Unicode版本的API的使用
[DllImport("user32.dll", EntryPoint="MessageBoxA")]
public static extern int MsgBox(参数1,参数2,...);//将我们自己的函数MessageBoxA映射(替换)为Dll库中的MsgBox
CallingConvention
该字段的值有以下几个:
- CallingConvention.Cdecl : 调用方清理堆栈。它使您能够调用具有 varargs 的函数(如:printf)。
- CallingConvention.StdCall : 被调用方清理堆栈。它是从托管代码调用非托管函数的默认约定。
- CallingConvention: 字段的默认值为 Winapi,而后者又默认为 StdCall 约定。
最后
以上就是单薄老师为你收集整理的labview生成DLL以及C#对其调用的全部内容,希望文章能够帮你解决labview生成DLL以及C#对其调用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复