LabVIEWwilliam hill官网
直播中

荣琪

8年用户 689经验值
擅长:可编程逻辑 测量仪表 嵌入式技术
私信 关注
[文章]

荣小菜补钙记第58期_LabVIEW调用User32.dll时路径设置的问题

荣小菜补钙记第58期_labview调用User32.dll时路径设置的问题
同步更新于 WeChat:荣小菜在补钙
大家好,我是荣小菜,本期讲一讲大家用LabVIEW调用User32时常常遇到的路径问题。
1.     问题
当使用LabVIEW的调用库函数节点调用User32.dll时,设置路径为C:WindowsSystem32user32.dll后在开发模式下能正常运行,生成应用程序后则程序无法打开。错误代码如下:
Demo1崩溃报告.JPG
                              
崩溃报告
针对该问题,我们搜索了一些资料,并编写了4个Demo进行测试。
2.     测试Demo1
Demo1是最初的崩溃版本,此处我们调用库函数时预先设置User32路径为
C:WindowsSystem32user32.dll,生成应用程序后,应用程序崩溃,无法打开。
Demo1前面板.JPG
Demo1前面板
Demo1程序框图.JPG
Demo1程序框图
3.     测试Demo2
Demo2是根据Demo1进行了1处修改,User32路径改为User32.dll,相当于我们仅填写库名称。生成应用程序后,应用程序正常运行。
Demo2程序框图.JPG
Demo2程序框图
4.     测试Demo3
为进一步测试,我们创建了Demo3,改为在应用程序框图中指定user32路径,并删除了“库名/路径”下的内容以保证可对比性。生成应用程序后,运行正常。
Demo3程序框图.JPG
Demo3程序框图
5.     测试Demo4
由于好奇,我们额外编写了Demo4,在程序框图中直接指定路径仅为库名称。结果生成程序框图后,程序依然正常运行。
Demo4程序框图.JPG
Demo4程序框图
6.     分析与总结
针对Demo1出现的问题,“YOLO晴“在博客中转载了一篇文章做了一些解释,主要是因为生成应用程序时仅user32被自动打包,应用程序运行时就会自动去调用打包后的user32,而这是不被支持的。(https://blog.51cto.com/u_15127598/4332896
下图Demo1的工程树也证实了这一点,C:WindowsSystem32路径下的User32.dll直接包含至依赖关系
       Demo1工程树1.JPG        Demo1工程树2.JPG
Demo1工程树
而生成应用程序后,user32.dll被打包进data文件夹中。
Demo1打包了user32.JPG
Demo1打包了user32
随后,当我们改为Demo2的形式,此时发现user32依赖关系虽然依旧存在,但生成应用程序时不再会将其打包。当应用程序运行时,将会自动调用我们计算机中已经注册过的user32。zhihuizhou在其帖子中讲解了部分调用User32.dll的方法,我们可以看到其路径设置与我Demo2中一致。(https://bbs.elecfans.com/jishu_210126_1_1.html)。可见,一般情况下调用user32时只写库名称即可完成调用。
Demo2工程树2.JPG
Demo2工程树
最后,当我们改为Demo3和Demo4中这种在程序框图中指定路径的形式后,两种应用程序的成功运行更进一步佐证了Demo1运行时崩溃的原因。因为Demo3,4只是指定了user32的路径,在生成应用程序时完全没有依赖关系。
Demo3和4工程树2.JPG
Demo3,4工程树
因此,推测只要保证应用程序调用User32时,其调用路径确确实实为“C:WindowsSystem32user32.dll”即可。另外,对于移植到其它计算机上,一般情况下Demo2也是没问题的。
本期就到此结束啦,测试Demo已上传
Demo2020.rar (1.2 MB)
(下载次数: 36, 2022-4-29 19:31 上传)
,感兴趣的同学可以看看,也期望各位大神能帮忙前来指教,进一步分享其它windows 动态链接库的调用例程和经验。
分享开源免费,共同学习进步^_^

回帖(2)

DrunkWatermalon

2022-5-6 14:24:24
大佬66666666,献上我的膝盖!!!!
举报

B1in

2022-11-24 14:03:19
大佬你好,我在新电脑(无LabVIEW)的环境下,安装源程序的安装包,在运行exe后发现如图情况,dll的调用方式与你实例中Demo2一样,我检查了新电脑的环境变量path路径,是有system32的路径的,可是却无法在正常调用该路径的dll,请问该如何解决。
举报
  • 1.PNG

更多回帖

发帖
×
20
完善资料,
赚取积分