微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 测试测量 > 虚拟仪器 > 关于lv调用dll

关于lv调用dll

时间:12-13 整理:3721RD 点击:
    手头的一个dll,用lv调用老是出问题,今天有了一点发现:
    这个dll封装了一堆数据库操作的函数,不论是取数据还是存数据,如果连续不断,没有时间间隔的取或者存,那么操作就没有问题,但是时间间隔稍微长一点就出问题了。
    原来的操作是先打开一次数据库,把数据库句柄保存在dll的全局变量里,然后取或存,最后再关闭。今天改为每次取或存,都先打开,然后关闭。做过这些修改之后就没问题了。
    因此推测,lv对dll是动态加载的,用完之后就会对其进行卸载。要在dll里使用全局变量保存一些数据的话,就需要注意了。

re
刚开始在LV里用dll

赞啊赞

以前调用过
失败
遂放弃

每次把句柄传一次给dll。

调用dll少输入输出数组就不会有大问题。

LabVIEW 中对DLL线程调用方式有Run in UI Thread 和Reent rant 两种调用方式。
在DLL 只被一个线程调用的情况下,两种调用方式都可选择,但在多线程调用情况下,需注意选择。Run in UI Thread 表示在用户接口线路中调用,DLL 的执行期将等到用户接口线程(在此即LabVIEW环境下的VI 应用程序) 执行DLL 的导出函数调用时才始;Reent rant 表示允许多个线程同时调用这个DLL 。如果你确定编制的DLL 为线程安全———简单地说,就是编制DLL 过程中,充分考虑了线程保护的同步机制,如使用临界区、互斥、信号量等,那么可以选用Reent rant 方式,这将有助于提高DLL 调用的性能。

呵呵,跟调用方式无关,跟lv对资源的管理有关

根据我调用DLL的一点经验,有些时候调用别人写的DLL时,Run in UI Thread模式有时候会使得每次运行的时间不定并且容易出错,这个时候改为Reentrant问题就解决了。

都一样的,呵呵

那怎么解释这种现象呢?

明天打电话骚扰NI的客服去,估计主要问题在lv对资源的管理上,因为不知道那个dll什
么时候就被卸载了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top