<link href="https://csdnimg.cn/public/favicon.ico" rel="SHORTCUT ICON">
<title>LabVIEW如何方便地调用DLL文件_c/c++_weixin_33991418的博客-CSDN博客</title>
<meta name="description" content="转自:http://bbs.elecfans.com/jishu_469502_1_1.htmlLabVIEW调用DLL文件  LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用。比如,在实际的工程项目中,用户可以用C++语言实现软件的运算部分,并把这些功能构建在DLL文件中,然后再使用 LabVIEW编写程序的界面部分,并通过调用编写好的DLL来调用运算部分的功能...c/c++">
<script src='//g.csdnimg.cn/tingyun/1.8.3/blog.js' type='text/javascript'></script><link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/new_css/detail_enter-09a7a75ce5.min.css"><script type="application/ld+json">{"@context":"https:\/\/ziyuan.baidu.com\/contexts\/cambrian.jsonld","@id":"https:\/\/blog.csdn.net\/weixin_33991418\/article\/details\/93900028","appid":1638831770136827,"title":"LabVIEW\u5982\u4f55\u65b9\u4fbf\u5730\u8c03\u7528DLL\u6587\u4ef6_c\/c++_weixin_33991418\u7684\u535a\u5ba2-CSDN\u535a\u5ba2","pubDate":"2018-01-22T16:18:00","upDate":"2018-01-22T16:18:00"}</script><link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/themes_skin/skin3-template/skin3-template-3faf0f2897.min.css">
<script type="text/javascript">var username = "weixin_33991418";var blog_address = "https://blog.csdn.net/weixin_33991418";var static_host = "https://csdnimg.cn/release/phoenix/";var currentUserName = "qq_35431097";var isOwner = false;var loginUrl = "http://passport.csdn.net/account/login?from=https://blog.csdn.net/weixin_33991418/article/details/93900028"var blogUrl = "https://blog.csdn.net/";var curSkin = "skin3-template";// 收藏所需数据var articleTitle = "LabVIEW如何方便地调用DLL文件";var articleDesc = "转自:http://bbs.elecfans.com/jishu_469502_1_1.htmlLabVIEW调用DLL文件  LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用。比如,在实际的工程项目中,用户可以用C++语言实现软件的运算部分,并把这些功能构建在DLL文件中,然后再使用 LabVIEW编写程序的界面部分,并通过调用编写好的DLL来调用运算部分的功能...c/c++";var articleTitles = "LabVIEW如何方便地调用DLL文件_c/c++_weixin_33991418的博客-CSDN博客";var nickName = "weixin_33991418";var isCorporate = false;var subDomainBlogUrl = "https://blog.csdn.net/"var digg_base_url = "https://blog.csdn.net/weixin_33991418";var articleDetailUrl = "https://blog.csdn.net/weixin_33991418/article/details/93900028";var isShowThird = "0"var skinStatus = "White"var canRead = true;var sideToolbarVersion = 2.2;
</script>
<script src="https://csdnimg.cn/public/common/libs/jquery/jquery-1.9.1.min.js" type="text/javascript"></script>
<!--js引用--><script src="//g.csdnimg.cn/??fixed-sidebar/1.1.6/fixed-sidebar.js,report/1.5.0/report.js" type="text/javascript"></script>
<link rel="stylesheet" href="https://csdnimg.cn/public/sandalstrap/1.4/css/sandalstrap.min.css">
<style>.MathJax, .MathJax_Message, .MathJax_Preview{display: none}
</style>
<div class="aside-content text-center" id="cpro_u2734133"><div id="kp_box_56" data-pid="56"><script  data-ad-client="ca-pub-1076724771190722" async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

最新文章

  • 熟悉并了解uml的使用(一)
  • 关于“企业文化”的联想
  • LeetCode 53. Maximum Subarray 最大连续字段和问题
  • 15种独特能力让你在社会中鹤立鸡群
  • 美国绿卡申请条件

归档

2019
7月 6篇
6月 72篇
5月 48篇
4月 56篇
3月 59篇
2月 63篇
1月 99篇

2018
12月 59篇
11月 57篇
10月 39篇
9月 56篇
8月 66篇
7月 61篇
6月 41篇
5月 62篇
4月 49篇
3月 74篇
2月 38篇
1月 61篇

2017
12月 73篇
11月 244篇
10月 63篇
9月 70篇
8月 84篇
7月 93篇
6月 65篇
5月 65篇
4月 58篇
3月 54篇
2月 39篇
1月 38篇

2016
12月 41篇
11月 43篇
10月 32篇
9月 43篇
8月 55篇
7月 38篇
6月 44篇
5月 56篇
4月 49篇
3月 68篇
2月 24篇
1月 33篇

2015
12月 41篇
11月 39篇
10月 38篇
9月 35篇
8月 38篇
7月 43篇
6月 33篇
5月 30篇
4月 38篇
3月 40篇
2月 17篇
1月 27篇

2014
12月 14篇
11月 37篇
10月 32篇
9月 17篇
8月 25篇
7月 33篇
6月 30篇
5月 37篇
4月 31篇
3月 31篇
2月 15篇
1月 21篇

2013
12月 21篇
11月 22篇
10月 15篇
9月 17篇
8月 27篇
7月 28篇
6月 26篇
5月 33篇
4月 24篇
3月 28篇
2月 17篇
1月 30篇

2012
12月 28篇
11月 28篇
10月 23篇
9月 24篇
8月 23篇
7月 24篇
6月 20篇
5月 29篇
4月 10篇
3月 33篇
2月 19篇
1月 10篇

2011
12月 17篇
11月 18篇
10月 20篇
9月 11篇
8月 16篇
7月 20篇
6月 17篇
5月 19篇
4月 18篇
3月 24篇
2月 13篇
1月 9篇

2010
12月 13篇
11月 17篇
10月 9篇
9月 13篇
8月 19篇
7月 13篇
6月 5篇
5月 13篇
4月 15篇
3月 19篇
2月 4篇
1月 14篇

2009
12月 9篇
11月 14篇
10月 11篇
9月 13篇
8月 10篇
7月 13篇
6月 9篇
5月 9篇
4月 10篇
3月 8篇
2月 5篇
1月 8篇

2008
12月 5篇
11月 8篇
10月 13篇
9月 7篇
8月 11篇
7月 7篇
6月 7篇
5月 16篇
4月 14篇
3月 7篇
2月 4篇
1月 7篇

2007
12月 10篇
11月 9篇
10月 8篇
9月 6篇
8月 1篇
7月 6篇
6月 7篇
5月 6篇
4月 5篇
3月 5篇
2月 4篇
1月 5篇

2006
12月 3篇
11月 8篇
10月 10篇
9月 4篇
8月 2篇
7月 6篇
6月 2篇
4月 4篇
3月 1篇
2月 1篇
1月 2篇

2005
12月 1篇
11月 4篇
10月 4篇
9月 1篇
7月 5篇
6月 1篇
3月 3篇
2月 2篇
1月 3篇

2004
12月 2篇
10月 3篇
9月 1篇

热门文章

  •                 <adata-report-click='{"mod":"popu_541","dest":"https://blog.csdn.net/weixin_33991418/article/details/86279174","ab":"new"}' href="https://blog.csdn.net/weixin_33991418/article/details/86279174" >win10怎么进入和退出安全模式?                        <img src="https://csdnimg.cn/release/phoenix/template/new_img/readCountWhite.png" alt=""><span class="read">6622</span></a></li><li><adata-report-click='{"mod":"popu_541","dest":"https://blog.csdn.net/weixin_33991418/article/details/91496755","ab":"new"}' href="https://blog.csdn.net/weixin_33991418/article/details/91496755" >解决4G网络移动打不开网站,WiFi可以正常访问                        <img src="https://csdnimg.cn/release/phoenix/template/new_img/readCountWhite.png" alt=""><span class="read">4590</span></a></li><li><adata-report-click='{"mod":"popu_541","dest":"https://blog.csdn.net/weixin_33991418/article/details/91440111","ab":"new"}' href="https://blog.csdn.net/weixin_33991418/article/details/91440111" >JS 应用篇(四):JS获取元素的高度                        <img src="https://csdnimg.cn/release/phoenix/template/new_img/readCountWhite.png" alt=""><span class="read">3969</span></a></li><li><adata-report-click='{"mod":"popu_541","dest":"https://blog.csdn.net/weixin_33991418/article/details/93174581","ab":"new"}' href="https://blog.csdn.net/weixin_33991418/article/details/93174581" >uni-app · 支付宝小程序踩坑                        <img src="https://csdnimg.cn/release/phoenix/template/new_img/readCountWhite.png" alt=""><span class="read">2803</span></a></li><li><adata-report-click='{"mod":"popu_541","dest":"https://blog.csdn.net/weixin_33991418/article/details/91419153","ab":"new"}' href="https://blog.csdn.net/weixin_33991418/article/details/91419153" >Java BufferedImage设置透明背景                        <img src="https://csdnimg.cn/release/phoenix/template/new_img/readCountWhite.png" alt=""><span class="read">2695</span></a></li></ul>
    </div>
    

LabVIEW如何方便地调用DLL文件

weixin_33991418 2018-01-22 16:18:00 72 收藏 2

最后发布:2018-01-22 16:18:00首发:2018-01-22 16:18:00
原文链接:http://www.cnblogs.com/zhengfa-af/p/8329576.html
展开

转自:http://bbs.elecfans.com/jishu_469502_1_1.html
LabVIEW调用DLL文件
LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用。比如,在实际的工程项目中,用户可以用C++语言实现软件的运算部分,并把这些功能构建在DLL文件中,然后再使用 LabVIEW编写程序的界面部分,并通过调用编写好的DLL来调用运算部分的功能。
LabVIEW 中是通过Call Library Function Node(CLN)节点来完成DLL文件调用的。创建一个新的VI,右击程序框图,在Functions Palette中依次选中Connectivity——Libraries&Executables工具栏即可找到该节点(图1)。
<ignore_js_op>

1.jpg (24.15 KB, 下载次数: 2)

下载附件 保存到相册

2015-2-12 11:22 上传

图1 Call Library Function Node
将节点放置在程序框图中,双击会出现它的配置对话框,共有四页。第一页用于填写被调用函数的信息(图2)。Library name or path需给出DLL文件名和路径,操作系统路径下的DLL文件,直接输入文件名也可调用,否则必须输入全路径。在这里已经给出名字的DLL是被静态加载到程序中的,也就是说当调用了这个DLL的VI被装入内存时,DLL同时被装入内存。LabVIEW也可动态加载DLL,只要勾选上Specify path on diagram的选项即可。选择了这个选项,在 Library name or path中输入的内容就无效了,取而代之的是CLN 节点多出一对输入输出,用于指明所需要使用的DLL的路径。这样,当VI被打开时,DLL不会被装入内存,只用程序运行到需要使用这个DLL中的函数时,才把其装入内存。Function name是需要调用的函数的名称,LabVIEW会把DLL中所有的暴露出来的函数都列出,用户只要在下拉框中选取即可。Thread栏用于设定哪个线程里运行被调用的函数。用户可以通过 CLN 节点的配置面板来指定被调用函数运行所在的线程。CLN 的线程选项非常简单,只有两项: Run in UI thread和Run in any thread。LabVIEW的程序框图上直接可以看出一个 CLN节点是选用的什么线程。如果Run in UI thread,节点颜色是橙色的;Run in any thread则是浅黄色的(图3)。
<ignore_js_op>

2.jpg (17.07 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:22 上传

图2 填写被调用函数信息
<ignore_js_op>

3.jpg (6.68 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:23 上传

图3 CLN不同线程对比
通常情况下,除非使用的动态链接库是多线程安全的,CLN 中选择Run in any thread方式;否则必须选择Run in UI thread方式。判断一个动态链接库是不是多线程安全的,需通过以下方法:如果一个动态链接库的文档中没有明确说明它是多线程安全的,那么就要当作是非多线程安全的;在可以看到动态链接库源代码的条件下,如果代码中存在全局变量、静态变量或者代码中看不到有lock一类的操作,那么这个动态链接库也就肯定不是多线程安全的。
选择了Run in any thread方式,LabVIEW会在最方便的线程内运行动态链接库函数,且一般会与调用它的VI在同一个线程内运行。因为LabVIEW是自动多线程的语言,它也很可能会把动态链接库函数分配给一个单独的线程运行。如果程序中存在没有直接或间接先后关系的两个CLN节点,LabVIEW很可能会同时在不同的线程内运行它们所调用的函数,也许是同一函数。对于非多线程安全的动态链接库,这是很危险的操作。很容易引起数据混乱,甚至是程序崩溃。
选择Run in UI thread方式,因为LabVIEW只有一个界面线程,所以如果所有的CLN设置都是界面线程,那么就可以保证这些CLN调用的函数肯定全部都运行在同一线程下,肯定不会被同时调用。对于非多线程安全的动态链接库,这种方式就保证了它的安全。
让我们回到配置对话框第一页,Calling convention用于指明被调用函数的调用约定。这里只支持两种约定:stdcall和C call。它们之间的区别在于,stdcall由被调用者负责清理堆栈,C call由调用者清理堆栈。这个设置错误时,可能会引起LabVIEW崩溃,也就是说如果LabVIEW调用DLL函数时出现异常,首先应该考虑这个设置是否正确。(Windows API一般使用的都是stdcall;标准C的库函数大多使用C call。如果函数声明中有类似__stdcall这样的关键字,它就是stdcall的。)第二页是函数参数的配置(图4)。
<ignore_js_>

4.jpg (13.76 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:23 上传

图4 配置函数的参数
DLL和LabVIEW之间传递参数,最常用的三种数据类型是数值、数值型数组和字符串。C语言中经常把指针或者数据的地址在函数间传递,在32位操作系统中,可以使用int32数值来表示指针。因此,当需要在LabVIEW中传递指针数据时,可以使用I32或U32数值类型来表示这个地址类型的数据。但是,64位的程序中,数据的地址只能使用I64或U64来表示。这样,如果一个调用了DLL函数的VI,并且函数参数中有地址型数据,使用固定数据类型的数值来表示地址,就要准备两份代码。解决方法是使用LabVIEW中的新的数据类型Pointer-sized Integer。这个数据类型的长度在不同的平台上会自动使用32位或64位长度。如果在C语言函数参数声明中有const关键字,可以选中Constant选项。布尔类型在DLL函数和LabVIEW VI之间传递没有专有的数据类型,是利用数值类型来传递的。输入时先把布尔值转变为数值,在传递给DLL函数;输出时再把数值转为布尔值。对于数组的传递,LabVIEW只支持C数据类型中的数值型数组,传递数组类型需要注意的的是“Array Format”要选择“Array Data Pointer”。这个设置中还有其他两个选项,带有“Handle”的参数类型都是表示LabVIEW定义的特殊类型的。在第三方的DLL中不会使用到数组参数作为输出值时,要记得为输出的数组数开辟空间。开辟数据空间的方法有两种:第一种方法,创建一个长度满足要求的数组,作为初始值传递给参数,输出数的数据就会被放置在输入数组的所在的内存空间内。第二种方法是直接在参数配置面板上进行设置。在Minimum size中写入一个固定的数值,LabVIEW就会按此大小为输出的数组开辟空间。在 Minimum size 中选择函数的其它数值参数,而不是固定数值。这样LabVIEW会按照当时被选择的参数值的大小来开辟空间。字符串与使用与数组是非常类似的,实际上在C语言中字符串就是一个I8数组。
在NI软件的安装路径下打开当前使用版本的LabVIEW文件夹,通过 examples\dll\data passing\Call NativeCode.llb找到简单数据类型在LabVIEW与C之间的对应关系。部分常见关系见表1。
<ignore_js_op>

5.jpg (39.05 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:23 上传

<ignore_js_op>

6.jpg (19.95 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:23 上传

<ignore_js_op>

7.jpg (33.51 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:23 上传

<ignore_js_op>

8.jpg (45.04 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:23 上传

表1 数据类型对比
第三页用于为DLL设置一些回调函数,可以使用这些回调函数在特定的情形下完成初始化、清理资源等工作(图5)。
<ignore_js_op>

9.jpg (15.24 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:24 上传

图5 设置回调函数
如果为Reserve选择了一个回调函数,那么当一个新的线程开始调用这个DLL时,这个回调函数首先被调用。可以利用这个函数为新线程使用到的数据做初始化工作。线程在使用完这个DLL之后,它会去调用Unreserve中指定的回调函数。Abort中指定的函数用于VI非正常结束时被调用,也就是让一个程序在运行完前停止。这些回调函数的原型在Prototype for these procedures中列出,必须要由DLL的开发者按照特定的格式实现。如果使用的DLL不是专为LabVIEW设计的,一般不会包含这样的回调函数。
第四页是错误处理方式,用户可根据需要选择相应的错误检查级别。
另外还需要注意的是,C语言中的struct在LabVIEW中可以使用cluster来表示,但有时需要作出相应的调整。这是因为在C语言中,struct的字节对齐是可以进行设置的,这就决定了其各元素的存放地址的可变性。C语言中的对字节对齐数可通过#pragma pack指令或在工程属性中进行指定。而在LabVIEW的cluster中,所有元素只能是1字节对齐的,所以如果要和C语言中非1字节对齐的struct对应,需要做出一些调整。比如,对于C语言中2字节对齐的struct,第一个元素如果是I8型的,在LabVIEW的cluster中第一个元素对应不变,但不能紧挨着放第二个元素,必须留一个无意义的空位。C语言的struct其实也是如此,只不过没有表现出来。所以为了方便,如果自己用C语言生成DLL文件供LabVIEW调用最好将struct都设为1字节对齐。C语言的struct中可以嵌套数组,但是这和LabVIEW中含有数组元素的cluster是不一样的,LabVIEW中需要将数组中的元素都拆开放入cluster中。
如果C语言的struct中含有一个指针,LabVIEW中的cluster只能用一个U32数值(32位系统上,64位系统上使用U64)来表示指针的地址,而不能将指针所指向的内容放到Cluster中去。如果声明的是指向struct的指针,才能在LabVIEW中使用cluster与之对应。CLN节点的配置面板中,没有一个专门命名的“struct”或者“cluster”参数类型,应选择“Adapt to Type”就可以了。如果参数的类型就是结构而非指针,考虑到C函数参数的压栈顺序,把一个结构体作为参数传给函数,相当于把结构中每个元素分别作为参数传递给函数。图6为C语言中struct和LabVIEW中cluster的部分匹配图。
<ignore_js_op>

10.jpg (20.07 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:24 上传

图6 struct和cluster匹配
LabVIEW打包DLL文件
我们接下来学习如何使用LabVIEW来打包一个DLL文件。
首先我们编写一个名为Scale.vi的程序,功能很简单就是对输入的数据乘上10,然后再输出(图7)。
<ignore_js_op>

11.jpg (18.08 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:24 上传

图7 scale.vi
必须在任务管理器中才能生成.dll文件。所以我们首先建立一个project,过程如下:
点击File>>New Project:
<ignore_js_op>

12.jpg (20.14 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:24 上传

图8 生成新项目
接着弹出是否将该VI添加到新项目的对话框:
<ignore_js_op>

13.jpg (13.71 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:24 上传

图9 是否添加VI到新建项目
选择Add,生成新的项目管理器,将其保存在需要的路径下:
<ignore_js_op>

14.jpg (16.51 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:24 上传

图10 项目管理器
右键单击项目浏览器窗口中的Build Specifications,在快捷菜单中选择New>>Shared Library(DLL),弹出对DLL文件进行设置的对话框。点击Category>>Information,根据自己需求修改Build specification name和Target filename:
<ignore_js_op>

15.jpg (16.02 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:25 上传

图11 Information页面
点击Source Files>>Project Files>> Scale.vi>> ,弹出对话框,直接用默认值,点击OK:
<ignore_js_op>

16.jpg (18.16 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:25 上传

图12 Define VI Prototype
点击Destination>> Scale.dll,点击 ,可选择需要保存的路径。然后再点击Support Directory,这是指明了DLL支持文件的路径(比如数据文件之类的放在哪个文件夹),选择默认即可:
<ignore_js_op>

17.jpg (14.52 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:25 上传

图13 Destination页面
Category中的Source Files可供用户对打包VI的属性和密码做一些设置;Advanced和Additional Exclusions可以做一些高级的设置,这些均按默认值即可。Version Information可让用户填写版本号、名称、版权、公司等信息:
<ignore_js_op>

18.jpg (19.1 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:25 上传

图14 Version Information
点击Run-Time Languages,可对支持语言进行选择,默认即可。点击Preview>>Generate Preview,可以预览到结果:
<ignore_js_op>

19.jpg (16.45 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:25 上传

图15 预览生成
点击Build,弹出生成状态对话框:
<ignore_js_op>

20.jpg (13.28 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:25 上传

图16 生成状态框
点击Done,生成完成,打开DLL文件保存的路径查看:
<ignore_js_op>

21.jpg (28 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:26 上传

图17 DLL文件保存路径
LabVIEW调用DLL文件
LabVIEW可以方便地调用DLL文件,这些DLL文件可以是其他编译工具,如VC,生成的。
LabVIEW可以直接通过CLN节点来调用DLL文件,以前面生成的Scale.dll文件为例。现有一个内部定时连续采集程序,通过调用该DLL文件,使读取的值为实际采集值的10倍(图18)。
<ignore_js_op>

22.jpg (14.89 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:26 上传

图18 连续采集程序
方法一
在程序框图放入Call Library Function Node,双击弹出对话框。在Function页面的Library name or path中给入生成的Scale.dll文件的路径,Function name选择Scale,其他选项默认。
<ignore_js_op>

23.jpg (21.43 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:26 上传

图19 Function页面
由于是LabVIEW生成的DLL文件,在Parameters页面不需要做改动,但是由于VI还有一路输出,所以还需要添加一个参数y,作为DLL文件的输出。
如果是C语言等非LabVIEW生成的DLL函数,需要将retuen type的type选项和Data type选项改成函数定义的参数类型,对于函数里输入的参数也都需要自行添加。Callbacks和Error Checking则不需要改动。
<ignore_js_op>

24.jpg (25.39 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:26 上传

图20 Parameters页面
点击“OK”,将生成的CLN的输入段连接到DAQmx Read.vi,return type输出连接到波形图表上,即可实现采集值放大10倍的功能。
<ignore_js_op>

25.jpg (15.98 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:26 上传

图21 完成后的程序
方法二
LabVIEW中还有一种方法可以调用DLL文件,在VI的选项栏,依次选择Tools——Import——Shared Library(.dll),弹出Import Shared Library对话框。
<ignore_js_op>

26.jpg (33.08 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:27 上传

图22 生成Import Shared Library对话框
选择Create VIs for a shared library,点击Next,在Shared Library(.dll) Files中输入Scale.dll文件的路径,Head(.h) File里填写头文件的路径。
<ignore_js_op>

27.jpg (15.83 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:27 上传

图23 选择DLL文件路径和头文件路径
点击Next,如果DLL文件中依赖其他的一些DLL文件,需要在Include Paths中填写这些文件的路径。其他选项可以根据客户需求设置,一般默认即可。这样一直点击Next到最后,选择Open the generated library,点击Finish。这样可以生成一个.lvlib格式的库文件,里面包含了Scale.vi,这是将调用该DLL文件的方法封装好的VI,只留下输入和输出接口,方便运用到LabVIEW的程序中。直接将Scale.vi拖放到刚才的连续采集中即可完成方法一的功能。
<ignore_js_op>

28.jpg (14.56 KB, 下载次数: 0)

下载附件 保存到相册

2015-2-12 11:27 上传

图24 完成的程序
VC调用LabVIEW生成的DLL文件
刚才介绍了LabVIEW调用DLL文件的方法,使用VC调用LabVIEW生成的DLL文件也很简单。还是以之前生成Scale 的DLL文件为例,不同的是采集电压程序使用的是C语言的例程,但和LavVIEW实现的功能相同。
首先将先前生成Scale DLL文件时,路径下所有的文件全部复制粘帖到C语言例程的文件夹下。打开连续采集程序,点击状态栏的Project——Settings,在Project Settings对话框中加载入Scale.lib的静态链接库。
在程序中键入#include "Scale.h",以便引入该DLL函数。下面是C程序的代码,功能是有限点采集电压,通过Scale.dll文件实现采样值放大10倍的功能。加粗部分是因为调用DLL文件所做的改动。
  1 #include2 #include "NIDAQmx.h"3 #include "Scale.h"4 5 #define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else6 7 8 9 int main(void)10 11 {12 13 int32 error=0;14 15 TaskHandle taskHandle=0;16 17 int32 read;18 19 float64 data[1000];20 21 char errBuff[2048]={'\0'};22 23 int i=0;24 25 double x10=0;26 27 28 29 30 31 /*********************************************/32 33 // DAQmx Configure Code34 35 /*********************************************/36 37 DAQmxErrChk (DAQmxCreateTask("",&taskHandle));38 39 DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandle,"Dev1/ai0"/*Config correct device*/,"",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL));//40 41 DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",10000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,1000));42 43 44 45 /*********************************************/46 47 // DAQmx Start Code48 49 /*********************************************/50 51 DAQmxErrChk (DAQmxStartTask(taskHandle));52 53 54 55 /*********************************************/56 57 // DAQmx Read Code58 59 /*********************************************/60 61 DAQmxErrChk (DAQmxReadAnalogF64(taskHandle,1000,10.0,DAQmx_Val_GroupByChannel,data,1000,&read,NULL));62 63 64 65 printf("Acquired %d points\n",read);66 67 68 69 for(i=0;i<1000;i++){70 71 Scale(data, &x10);72 73 printf("the %d Value is : %f \n",i,x10);74 75 76 77 }78 79 Error:80 81 if( DAQmxFailed(error) )82 83 DAQmxGetExtendedErrorInfo(errBuff,2048);84 85 if( taskHandle!=0 ) {86 87 /*********************************************/88 89 // DAQmx Stop Code90 91 /*********************************************/92 93 DAQmxStopTask(taskHandle);94 95 DAQmxClearTask(taskHandle);96 97 }98 99 if( DAQmxFailed(error) )
100
101 printf("DAQmx Error: %s\n",errBuff);
102
103 printf("End of program, press Enter key to quit\n");
104
105 getchar();
106
107 return 0;
108
109 }

所以,使用LabVIEW不仅可以方便地调用各种编译软件生成的DLL文件,自己也能生成DLL文件供其他编译软件调用。这样,用户在编写大型项目时更加灵活,也为熟悉C语言的工程师提供了巨大的方便。本文只对LabVIEW和VC相互调用DLL文件做了简单的介绍,很多高级功能和技巧,用户可以在实际运用中逐渐掌握。

转载于:https://www.cnblogs.com/zhengfa-af/p/8329576.html


http://www.taodudu.cc/news/show-4160817.html

相关文章:

  • labview如何加载库_LabVIEW如何方便地调用DLL文件
  • LoadRunner 常用函数大全+1
  • C语言学习--01 认识数据类型
  • 力扣 777. 在LR字符串中交换相邻字符
  • X86 和 X64
  • 使用串口转USB连接树莓派
  • macOS Big Sur 安装 CH340 串口转 USB 驱动
  • 5分钟搞定各类USB转serial串口驱动,最简单的方法
  • 如何在Mac终端删除U盘的隐藏文件
  • 轻松恢复U盘隐藏文件
  • U盘html文件恢复不了,u盘文件突然不见了怎么恢复?恢复小技巧来了
  • u盘中的隐藏文件该怎样恢复
  • U盘 如何自定义U盘图标并彻底隐藏配置文件
  • U盘图标改变与文件隐藏
  • u盘中毒文件被隐藏恢复方法
  • 强制显示U盘隐藏文件
  • U盘文件恢复,3个方法恢复教程
  • 恢复u盘隐藏文件
  • win7查看隐藏文件_u盘删除文件怎么恢复?
  • Java学习笔记(二)
  • Zabbix整合ELK实现日志数据的分析实时监控
  • java学习笔记参考
  • Oracle - CentOS7.4 静默安装Oracle11g
  • MEC@JavaSE@实战篇@笔记05@计算机网络技术基础
  • Docker 学习前置,网络IP地址以及交互
  • Android APP连接 MySQL
  • JAVA程序员笔试面试题汇总及答案 .
  • Docker容器化开发
  • 18_2Servlet学习笔记
  • JAVA面试题大全(part_1)

labview调用DLL相关推荐

  1. LabVIEW调用DLL动态链接库

    LabVIEW调用DLL动态链接库 有些数据运算比如多个数组之间的处理.雨流计数法.卡尔曼滤波使用labview这样的图形编程语言实在过于麻烦,实现不难但有一定的逻辑复杂度,倒不如用C++或者matl ...

  2. LabVIEW调用DLL时出现异常0xc0000005代码

    LabVIEW调用DLL时出现异常0xc0000005代码 当调用本地DLL时,LabVIEW崩溃,并且收到一条错误消息,说明发生了内存访问冲突(异常代码:0xc0000005). 将LabVIEW版 ...

  3. labview如何加载库_LabVIEW如何方便地调用DLL文件

    转自:http://bbs.elecfans.com/jishu_469502_1_1.html LabVIEW调用DLL文件 LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用.比如, ...

  4. labview对dll的调用

    LabVIEW调用DLL文件 LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用.比如,在实际的工程项目中,用户可以用C++语言实现软件的运算部分,并把这些功能构建在DLL文件中,然后再 ...

  5. 【更新v1.1】matlab/simulink代码生成与labview调用(DLL方式)

    文章目录 0. 补充内容:SIMULINK代码生成为DLL时封装多个函数 1. 测试范例 1.1 方法1:直接输入二维矩阵(推荐方案) 1.2 方法2:一维向量输入后转换二维矩阵(特殊情况) 2. 实 ...

  6. LabVIEW调用.so文件的方法

    LabVIEW调用.so文件的方法 (一)为什么需要用LabVIEW调用.so文件 (1.1)背景 (1.2)使用.so文件的优势 (1.3)调用.so文件示例 (二).so文件是什么 (三).so文 ...

  7. LabVIEW系列——LabVIEW下调用DLL动态链接库

    LabVIEW下调用DLL动态链接库 目录 一.需求场景 二.所需文件 三.调用步骤 注意 需求场景: 使用其他没有提供LabVIEW接口vi库,但是提供了DLL动态链接库文件的板卡. 调用其他应用程 ...

  8. labview调用外部仪器设备案例一(标签打印机)

    labview调用BarTender案例一(斑马标签打印机) 第一章 调用BarTender标签模板制作软件打印标签 文章目录 labview调用BarTender案例一(斑马标签打印机) 第一章 调 ...

  9. C#创建和调用DLL

    一.写在前面 C# 语言是一种简单但功能强大的编程语言,用于编写企业应用程序. C# 语言从C和 C++语言演化而来,在语句.表达式和运算符方面使用了许多 C++ 功能. C# 语言在类型安全性.版本 ...

最新文章

  1. CVPR 2020 | CentripetalNet:目标检测新网络,COCO 48 % AP超现所有Anchor-free网络
  2. 资产管理大佬讲述:如何用大数据及人工智能挑选基金?
  3. Python3 格式化输出 %s %d 等
  4. AWS — AWS EC2
  5. java的准动态(反射)
  6. idea中启动RunDashboard
  7. 如何在国内下载Eclipse及其插件
  8. 《DB 查询分析器》中断SQL语句的执行
  9. java窗体容器坐标_Java的屏幕坐标是以像素为单位的,容器的左下角被确定为坐标的起点。...
  10. java并发AtomicIntegerArray
  11. anaconda windows theano keras 完全安装教程,没有gpu忽略那段话也成功了
  12. AlexNet原理及tensorflow实现
  13. ASP.net+MVC--2
  14. windows server 2003 32位支持8G内存
  15. kubernetes视频教程笔记 (10)-资源清单yaml常用字段解释
  16. vue的第一份正式源码
  17. 推荐一款基于bootstrap的漂亮的前端模板—inspinia_admin
  18. 浅谈人脸识别技术的方法和应用
  19. 尚医通 (三十一) --------- 手机登录
  20. Python:爬山法/随机重启爬山法/允许侧移的爬山法解决八皇后问题

热门文章

  1. 基于BPM(业务流程管理)的低代码开发平台有哪些优势?
  2. 天蝎项目整机柜服务器技术规格,天蝎整机柜服务器技术规范2.5.doc
  3. 腾讯优图实现人脸对比
  4. ES-分片路由(routing)
  5. 做一个电商网站需要多少钱
  6. rm -rf 误删除数据如何进行恢复
  7. 【运营宝典】华为分析服务如何助力广告投放策略优化?
  8. Injective Protocol官方文档翻译(九) -清盘、清算(Liquidation)
  9. 全球医疗实力排名:各国差距有多大?
  10. Linux打开21端口