LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

prevent application from unloading dll

Hi
 
I have created an application that is made up of primarily two vi's, with one calling the other.  The second vi, or the one that is called in turn calls/loads a dll.  Now my problem is that before creating an application my vi's worked great since the dll did not get unloaded until labview was exited, however with the application it seems like if i close the second vi, or the one that calls/loads the dll then the dll is unloaded.  Is there anyway to keep the dll in memory until the whole application is closed and not just the vi that calls the dll.
 
The solution I have used till now is to call the dll from both vi's but I rather not take that approach
 
thanks
0 Kudos
Message 1 of 2
(2,620 Views)


@reza_sed wrote:
Hi
 
I have created an application that is made up of primarily two vi's, with one calling the other.  The second vi, or the one that is called in turn calls/loads a dll.  Now my problem is that before creating an application my vi's worked great since the dll did not get unloaded until labview was exited, however with the application it seems like if i close the second vi, or the one that calls/loads the dll then the dll is unloaded.  Is there anyway to keep the dll in memory until the whole application is closed and not just the vi that calls the dll.
 
The solution I have used till now is to call the dll from both vi's but I rather not take that approach
 
thanks


You don't need to call a DLL in order to have it in memory. As long as one VI in your VI tree has a reference to a DLL, and the according Call Library Node is not set to provide a dynamic DLL path (LabVIEW 8.2 and newer feature) that DLL stays in memory. No need to ever call that Call Luibrary Node. If another VI then gets into memory referencing the same DLL, LabVIEW will ask Windows to load that DLL too, but Windows seeing that the DLL is already loaded will only increment its internal load reference count.

So having a Call Library Node (or a subVI containing one) in your main VI will be enough to keep the DLL loaded. You can code something like where you put this SubVI in a case structure whose frame never gets executed. But do not disable that case by a diagram constant since LabVIEW will then optimize out the entire digram when you ever are going to build an application. Instead wire the case to a front panel control whose default value is set so that the frame will never be executed.

Rolf Kalbermatter
Rolf Kalbermatter
My Blog
0 Kudos
Message 2 of 2
(2,605 Views)