荣小菜补钙记第58期_labview调用User32.dll时路径设置的问题 同步更新于 WeChat:荣小菜在补钙
大家好,我是荣小菜,本期讲一讲大家用LabVIEW调用User32时常常遇到的路径问题。
1. 问题
当使用LabVIEW的调用库函数节点调用User32.dll时,设置路径为C:WindowsSystem32user32.dll后在开发模式下能正常运行,生成应用程序后则程序无法打开。错误代码如下:
崩溃报告
针对该问题,我们搜索了一些资料,并编写了4个Demo进行测试。
2. 测试Demo1
Demo1是最初的崩溃版本,此处我们调用库函数时预先设置User32路径为
C:WindowsSystem32user32.dll,生成应用程序后,应用程序崩溃,无法打开。
Demo1前面板
Demo1程序框图
3. 测试Demo2
Demo2是根据Demo1进行了1处修改,User32路径改为User32.dll,相当于我们仅填写库名称。生成应用程序后,应用程序正常运行。
Demo2程序框图
4. 测试Demo3
为进一步测试,我们创建了Demo3,改为在应用程序框图中指定user32路径,并删除了“库名/路径”下的内容以保证可对比性。生成应用程序后,运行正常。
Demo3程序框图
5. 测试Demo4
由于好奇,我们额外编写了Demo4,在程序框图中直接指定路径仅为库名称。结果生成程序框图后,程序依然正常运行。
Demo4程序框图
6. 分析与总结
下图Demo1的工程树也证实了这一点,C:WindowsSystem32路径下的User32.dll直接包含至依赖关系
Demo1工程树
而生成应用程序后,user32.dll被打包进data文件夹中。
Demo1打包了user32
Demo2工程树
最后,当我们改为Demo3和Demo4中这种在程序框图中指定路径的形式后,两种应用程序的成功运行更进一步佐证了Demo1运行时崩溃的原因。因为Demo3,4只是指定了user32的路径,在生成应用程序时完全没有依赖关系。
Demo3,4工程树
因此,推测只要保证应用程序调用User32时,其调用路径确确实实为“C:WindowsSystem32user32.dll”即可。另外,对于移植到其它计算机上,一般情况下Demo2也是没问题的。
本期就到此结束啦,测试Demo已上传
,感兴趣的同学可以看看,也期望各位大神能帮忙前来指教,进一步分享其它windows 动态链接库的调用例程和经验。 分享开源免费,共同学习进步^_^