08-22-2013 04:45 PM - edited 08-22-2013 04:49 PM
@Abel_ge wrote:
Hey folks.... Greetings...
I was having a look at this tread as i was trying something similar. I have a similar piece of code which uses a valid path or the "Not a Path" constant to load / unload the dll in one vi. However once the dll is loaded using a valid path, i have calls to numerous dll functions in multiple different vi's. Once the data has been acquired from the dll, i invoke the initial vi and pass in the "not a path" constant so that the dll gets unloaded (Hopefully).
Would this unload the dll correctly?
Also Mathieu, u said you did a lot of tests to confirm if the loading / unloading was successful. Could you please let me know how u tested this. I am using Labview 2012 on an XP system.
I am facing the issue of static variables in the dll not being destroyed and recreated when the next session of data acquision starts. (Sessions are started & terminated by the user pressing Start & Stop buttons on the UI).
That can't work! Each CLN maintains a link to the DLL and only unloads the DLL when the VI itself is unloaded from memory or the path changes. As long as there is one single CLN referencing your DLL and its path has not been reset to a different path, the DLL will remain in memory.
Basically any DLL relying on it to be unloaded/reloaded to work properly should be considered totally broken. And storing data created in one function in a static variable to be retrieved by a different function is a very bad design pattern. Why not let the initial function directly return the data?
08-23-2013 01:10 AM
Hey Rolf, Many Thanks for the inputs....
Yes i should look into the dll for clearing of data variables as i have Start & Stop session methods that are being invoked from Labview. I think that would be the real fix rather than loading/unloading the dll through Labview 🙂
Best regards, Abel.
08-23-2013 06:39 AM
Hi Abel,
In my code, my DLL, was accessing some internal data saved by other functions.Since I couldn't only run my function and return the results due to high complexity of the code, I had to store some values in Variables, and I was simply reding them when I needed to know the output. So basically, I was only checking if the output of my function was changing since I had access to this value.
However, as rolf said, that not a good design, but in my situation, I had no other choice and it was one the the first project I was working on in LV.
Best Regards,