Unloading dll freezes labview

Hi guys,
I am trying to unload a dll file and it seems to freeze labview. It sways happens at the last CLFN. If I disable the last CLFN node than the new CLFN freezes. I have watched it go through with the lightbulb thing and everything works fine until the last time I try to write an invalid path to a CLFN. Any Ideas?
Any help would be greatly appreciated.
Adam
Attachments:
Unload dll error.png ‏41 KB

Hi Adam,
I believe you are seeing this problem as you are calling the Call Library Function Node within the for loop. This means you will need to use another method to unload the dll.
There are a couple of methods you could use:
1. Whenever you specify the path to a dll on the blck diagram, LabVIEW will automaticaly unload the current dll and load the new one. As long as you are not trying to use an identical name while the VI is running, LabVIEW should automatically do the unloading for you
2. If you still need to unload the DLL every single time you can bundle the Call Library Function Node into a subVI that you can call dynamically from your main VI. You can do this using a Call by Reference Node. Once the subVI has finished executing it will automatically unload the DLL for you.
I can imagine I haven't explained this very well so if you have questions please feel free to post them. It may take me some time to get back with a coherent answer though.
Best Regards,
Chris
National Instruments - Tech Support

Similar Messages

  • How to unload DLL

    Hello,
    I am using LV 8.2 to call a DLL but I am facing a unload DLL problem:  the result can not be cleared from the memory even after I closed the VI.  Only way to unload the DLL is to shutdown the LV.
    I was told to using VI server to call a subVI which deals with the DLL.  But for our application, using VI server seems not practical.  Is VI server the only way to solve this problem?  Anyone has an idea about this?  Thank you in advance.
    ---Julia

    "LoadLibrary (and FreeLibrary) and GetProcAddress " are used in C/C++, or CIN, right? 
    These are actually simple dll's API's. You can use them in C/C++ or CIN (CIN's are obsolete), but also in LabVIEW. Only problem is that you can't call a pointer to a function in native LabVIEW. Check out Dynamic DLL.zip in the last message of this thread:
    http://forums.ni.com/ni/board/message?board.id=170&message.id=39381&view=by_date_ascending&page=1
    "I thought I have to use two mechines (IP/TCP) for VI server application. Just find out it may be locally controlled. I will give a try."
    This won't solve the leak. The leak will still be there, but on another machine.
    "PS: Sorry for the duplicated post.; I didn't know how to delete the other one."
    That's OK. But if you can't delete it, at least edit it so it says "Sorry, duplicate post". If you don't, people might spend time answering questions that are already answered.
    Regards,
    Wiebe.

  • Prevent applicatio​n 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

    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
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • How can I calling LabView DLL within LabView and pass similar Data Types?

    I am trying to use an Instrument Driver, which is created in LabView6.1 as a DLL. At this point I have only LabView to test this DLL. I was wondering, is there easy way to find out what sort of Parameter or Data Type I should be using.
    How can I pass the following data with in LabView:
    LVRefnum as Type?
    LVBoolean as Type?
    TD1 (a structure) as Type?
    It is funny to see that I am able to create a DLL in labview but having trouble calling it within LabView. I thought, it would be easier to test the DLL within the same environment.
    Basically, I am more worried about the VISA calls that are used in the driver to communicate with instrument. Because, there is no link to �VISA32.dll� in
    the header file, is that handled by the LV Run-time engine? I guess more details are needed on using the LabView DLL within LabView from National Instrument Technical Support.
    Attachments:
    RL5000.h ‏1 KB

    A LVRefNum seems to be an unsigned long data type (32bit). You can cast it
    in LV then use that as a parameter to call the DLL. (an Occurrence type
    seems to be a Ulong32)
    When you created the DLL what was the resulting type for the LVRefNum?
    Happy Holidays
    "Enrique" wrote in message
    news:[email protected]..
    > I see...
    >
    > After doing some research, it seems to me that there is no easy way to
    > find out the type of data, other than looking at the header file and
    > have documents like Using External Code in LabVIEW handy. The
    > following information is from that document:
    >
    > LVBoolean is an 8-bit integer. 1 if TRUE, 0 if FALSE.
    >
    > LabVIEW specifies file refnums using t
    he LVRefNum data type, the
    > exact structure of which is private to the file manager. To pass
    > references to open files into or out of a CIN, convert file refnums to
    > file descriptors, and convert file descriptors to file refnums using
    > the functions described in Chapter 6, Function Descriptions.
    >
    > I know you are creating a dll in LabVIEW, but I am pretty sure the
    > information applies as well and is useful. For your dll this can be
    > interpreted that, rather than passing a LVRefnum, try passing the file
    > descriptor.
    >
    > From the header file, is can be deduced that TD1 is a cluster in
    > LabVIEW.
    >
    > You are right in saying that "more details are needed on using the
    > LabView DLL within LabView from National Instrument Technical
    > Support.".
    >
    > Enrique

  • How to use a C# dll in Labview?

    How can I use a C# dll in Labview 8.2? With the "Import Shared Library" Wizzard I need the header file which I don't have. Is there another way
    to use such .dll to import the functions created in C#?
    Thanks in advance
                                  Norick

    Norick,
    afaik there is no tool which provides you the possibility to create something like an instrument driver for .NET assemblies.
    Maybe we should take a look into terminology:
    - Instrument driver: This is a set of functionality, which provides the user with an easy to use API for a special instrument. Very often, the driver itself is written in C/C++ and provided as a DLL.
    - "Import Shared Library" Wizard: This wizard enables the user to create an own API for any C/C++ DLL (or compatible) for LabVIEW. This wizard requires the information on all exported functions; this info is contained in the header file. The result of the wizard is a set of VIs containing one Call Library Function Node each for each exported function.
    - .NET assembly (extension .exe OR .dll): This can be compared to ActiveX. So the way to program with .NET is similar to ActiveX. Maybe you want to take a look into the examples of LabVIEW regarding .NET...
    - Global Assembly Cache (GAC): All assemblies contained here are registered in the system. Every application can easily work with assemblies contained here.
    - Private assemblies: This would be the way to work with .NET assemblies which are built on your own. You have to select the .DLL-file itself and make sure that the file can always be found in the same (relative)folder of your application.
    hope this helps,
    NorbertMessage Edited by Norbert B on 02-21-2007 02:16 AM
    CEO: What exactly is stopping us from doing this?
    Expert: Geometry
    Marketing Manager: Just ignore it.

  • How to use dll in Labview ?

    I compile this code to dll file with VC++2010 filename is test_dll.dll .
    #include "stdafx.h"
    #include <iostream>
    #include <Windows.h>
    using namespace std;
    int main(int a){
        cout << "Test dll...............\n";
        return a;
    After that, I put Call Library Function node in editor and double click Call Library Function node. I browse test_dll.dll into Library name or path and set function prototype to int32_t main(int32_t a); but it show error Call Library Function Node 'test_dll.dll:main':function not found in libraly. How to use dll in Labview ?  And I have more question is what is differrent from Tools -> Import -> Shared Library(.dll) and use Call Library Function node.
    Solved!
    Go to Solution.

    The issue you are having is that LabVIEW is not capable of using C++ DLLs directly. It only handles C DLLs. This does not mean that if you you cannot use the DLL if it's compiled with the C++ compiler as opposed to the C compiler. Rather, it means that you must take extra steps in order to use it from LabVIEW. The primary issue is that of name mangling or adornment. This is discussed here: http://zone.ni.com/devzone/cda/tut/p/id/4877. Basically you need to prepend extern "C" in front of your prototypes in your header files. I would also suggest reviewing this article: https://decibel.ni.com/content/docs/DOC-14564.

  • How to use matlab compiled DLL in Labview ?

    I have LV 8.5, and am unable to use a matlab compiled DLL in my LV code. I have tried the 'import'  command, but it does not list any functions. However, it does not show any errors during its execution. The existing solutions/responses to this question do not work either. I would also like to know of a way to deal with mxArray datatype. What is its equivalent in C (or any other high-level language) ? How do I retrieve an array that is returned from the matlab dll ?

    I'm assuming you have either Matlab installed or at the very least the Matlab Runtime, otherwise the DLL won't work. The "import" command relies on having a header file. Do you have one? You also need to make sure the DLL has been compiled so that it's compatible with LabVIEW. The most likely problem is name mangling, which also occurs when you try to compile a DLL written in C++. See this post, which contains links to useful posts.
    The mxArray datatype is a special datatype which is actually a structure. It's complicated. Your best bet is to create a C DLL that acts as an intermediary between the Matlab DLL and LabVIEW. If you are able to, you can, instead, simply call the Matlab code directly using the Matlab script node.

  • Creating a DLL in LabVIEW containing a function using pointer to pointer

    Hi!
    I´m facing the problem to create a DLL from LabVIEW containing the following C-function:
    functionF(structS** arrayA) ,
    where:
    structS is a struct of various data-types (e.g. int)
    arrayA is an C-array of structS
    How can this be done? Any ideas?
    Thank you in advance for your support

    This cannot be done in LabVIEW. LV doesn't have the data type "Pointer" as C has.
    The only workaround I can think of is to use an array of strings in LV and in the interface define the parameter as "by reference". In LV you have to typecast the wire with the string to a cluster withthe layout of structS.
    As far as I know an array of strings is represented as an array of pointer to strings. This is because strings are variable in length and therefore LV uses this method storing the pointers to the strings in the array and not the elements as usual.
    You have to read the document about memory and data types of LabVIEW. In elder versions this was in the LabVIEW Bookshelf but I haven't found it in short in the newer version.
    Waldemar
    Using 7.1.1, 8.5.1, 8.6.1, 2009 on XP and RT
    Don't forget to give Kudos to good answers and/or questions

  • Creating a DLL in Labview 8.6 and calling it from Visual Basic 6.0

    Dear friends,
    I need to create a DLL in Labview 8.6 and call it from Visual Basic 6.0. The system works as follows:
    I made an application using Labview 8.6 + Vision Assistant 8.6 where I can obtain the x,y coordinates of a template in an certain image being captured by an USB camera. The template coordinates change every time it moves and Visual Basic 6.0 must read these x,y values in real time. I found some information in the link http://zone.ni.com/devzone/cda/tut/p/id/3925, but it works for version 6.x of Labview and 8.6 version is different. Am I in the right path? If you have an updated tutorial like the one in the link above but for Labview 8.6 It would be very nice. Please help me.
    Kind regards.
    João Júnior

    Hello Osvaldo,
    I analysed the updated tutorial you sent me, but the thing is that it doen't show how to create the DLL in LV 8.6 but only show how to accessing the DLL from VB6. My problem is really HOW TO CREATE THE DLL IN LV8.6. In the link http://zone.ni.com/devzone/cda/tut/p/id/3063 there is detailed information about how to do this in LV6.x, the problem is that I don't find the path Tools»Build Application or Shared Library (DLL) in LV8.6, I think the procedure in LV8.6 is a little bit different. Don´t you have an updated tutorial on how to build a dll in LV8.6?How could you help me?
    Kind regards.
    João Júnior

  • Creating a DLL in labview that interacts with a DLL in C++

    I’m creating a DLL in LabView that will interact with a DLL created in C++. I don’t have control in the C++ DLL.
    Both DLLs would pass a big amount of data as strings between them, for that it is necessary to allocate memory to store information in one dll and read it in the other and viceversa. The first time I will call the other DLL,  with this function :
    long in texts ( unsigned char *name, void *id)
    I would pass them a pointer pointer to an ASCII string  (name) and a pointer to an unspecific data structure (id). The id would then be passed to me by his DLL whenever they use one of the functions implemented on my dll.
    What I don’t know is what to pass as a void*id? What are they expecting? A number? A cluster?
    The other thing I don’t know is how to allocate memory in labview and write there information, such as a string, and then tell the other DLL to look for the information at that DLL, and viceversa. I hope I made my self clear, hope somebody can help me, and please indicate me if you need more information

    Hello Osvaldo,
    I analysed the updated tutorial you sent me, but the thing is that it doen't show how to create the DLL in LV 8.6 but only show how to accessing the DLL from VB6. My problem is really HOW TO CREATE THE DLL IN LV8.6. In the link http://zone.ni.com/devzone/cda/tut/p/id/3063 there is detailed information about how to do this in LV6.x, the problem is that I don't find the path Tools»Build Application or Shared Library (DLL) in LV8.6, I think the procedure in LV8.6 is a little bit different. Don´t you have an updated tutorial on how to build a dll in LV8.6?How could you help me?
    Kind regards.
    João Júnior

  • Creating dll in Labview

    Hello All,
    How do i create a dll in labview? I want to use it as a plug in into an application.
    Demmy

    Hi Demmy
    What LabVIEW version are you using? If you are using version 8 and higher then you have to have your VIs loaded into a LabVIEW project and you use the project build specification. You can access the LabVIEW 2009 help on how to build a dll here.
    Here is a quick summary:
    In the project window right click build specifications and choose New -> Shared Library (DLL). This will open the window to create the dll.
    Go to the Source Files category and use the arrow to take the VIs that you want into exported VIs, a dialog will then come up to define the function prototype for that vi. Do this for each vi you want to access in your dll.
    You will need LabVIEW professional version to create dlls and the target computer where you are using the dll must have the LabVIEW run time engine installed.
    Message Edited by Karissa on 03-03-2010 09:05 PM
    Systems Test Engineer
    Certified LabVIEW Architect (CLA)

  • Problem with building a dll in labview

    Hello,
    I want to be able to run a LabView vi from Java and found that the best way to do this is to create a DLL in LabView and then call it in Java using JNI. I did a dummy program in LabView to test, but the problem is that the instructions I found don't seem to exist! For example, one tutorial I was following said to: "Open a new VI and select Tools»Build Application or Shared Library (DLL).". But I don't have that under tools, just Build Application (EXE) from vi, which gives a project file. In another place it said to "Expand My Computer. Right-click Build Specifications and select New»Shared Library from the shortcut menu to display the Shared Library Properties dialog box" but I have no idea what that means.
    I have the LabView 2009 trial version, could that possibly be making a difference? If not, what am I doing wrong? Or is there a better way to run a LabView program from Java?
    Thanks a lot!
    Hugh

    Actually, the second one is from LabView help. I tried looking up Application Builder like you said but again it begins with the instructions "Expand My Computer. Right-click Build Specifications and select New»Application from the shortcut menu to display the Application Properties dialog box" and I have no idea what this means What do they mean by My Computer? And Build Specifications? I don't have any of that... I'm sorry but I'm new to all of this, I've never worked with DLLs before in any language, and all I want to do is run my LabView program when I press a button on my Java interface!! If there is a better way to do it, that would be great!
    Thanks at any rate,
    Hugh

  • Build a DLL in LabVIEW & Use the DLL in LabVIEW

    I am trying to build a DLL for the simple vi with LabVIEW and want to use the DLL in LabVIEW. is it impossible?
    I wrote a vi and it have 2 terminals. one is the input for numeric dbl data type and one another is the output for numeric dbl 1D array data type.
    It was built with the Application builder for LabVIEW 8.0 and DLL was created successfully.
    I want to use this DLL in new vi with LabVIEW.
    Call library function used. I wrote a new vi to use that DLL.
    In config dialog I config each parameter for dll and connected terminals. but it doesn't work
    pleas refer to the attatched file and let me know what I missed.
    Attachments:
    Array1D.zip ‏60 KB

    At first I kept scratching my head wondering why someone would want to do this. Create a DLL in LabVIEW to call it from LabVIEW. Seems redundant. But, perhaps it's an exercise or perhaps it's for testing the DLL...
    In any event, calling the DLL worked for me in 8.2. How are you configuring your Call LIbrary Function node? I have it set up as follows:
    return type: void
    iteration: Numeric, Signed 32-bit Integer, pass by value
    array1D2: array type, Signed 32-bit Integer, 1 dimension, "Array Data Pointer" format
    len: Numeric, Signed 32-bit Integer, pass by value
    Then I called the DLL like this:
    Message Edited by smercurio_fc on 03-16-2007 12:57 PM
    Attachments:
    Example_BD.png ‏2 KB

  • How to create a dll in LabVIEW with a 2D array

    I'm attempting to create a dll in LabVIEW with the following parameters from Test DLL.vi:
    Inputs:
    IN1 - Word
    Buffer - 2D array of Unsigned Byte
    Output:
    OUT1 - Unsigned Byte
    The prototype is constructed as follows in the Build Specifications of the Project:
    uint8_t TestDLL(int16_t IN1, TD1Hdl *Buffer)
    The dll builds successfully but when I attempt to use it in another VI (using the Call Library Function block) the prototype appears but it does not look like what was defined from the Build Specifications.  Instead it looks like the following:
    void TestDll(void );
    I attached some screen shots of all the settings as described above.
    Attachments:
    Test DLL Front Panel.JPG ‏85 KB
    DLL Prototype Before.JPG ‏84 KB
    DLL Prototype After.JPG ‏54 KB

    The Test DLL.vi is what I used to create dll prototype with in the Build Specifications in the project.
    Note:  There is no logic implemented yet.
    Attachments:
    Test DLL.vi ‏7 KB

  • Using a cygwin DLL in LabVIEW 7.0

    Hallöchen!
    I try to use a function from a cygwin DLL in a LabVIEW 7.0 VI. So
    I wrote
    void funcName(double values[], long number_values)
    for (int i=0; i < number_values; i++) values[i] /= 2.0;
    to the file test.cc and said (cygwin gcc 3.3.1)
    gcc -c test.cc
    gcc -shared -o hall.dll test.o
    Then I included it as a shared DLL in LabVIEW, added the correct
    parameter sequence and return value. The name of the function was
    a little bit different (Z8funcNamePdl).
    But: LabVIEW crashes every single time. Not matter what I say about
    calling convention or reentrance. As soon as the "configure" window
    is closed, *all* LabVIEW windows are closed.
    What am I doing wrong?
    Thank you!
    Tschö,
    Torsten.
    Torsten Bronger, aquisgrana, europa
    vetus

    Hallöchen!
    LarsRoe writes:
    > [...] LabVIEW arrays have a different structure than the
    > traditional C arrays. As a quick test, try passing in a single
    > DBL value by pointer for the first argument, and 1 for the second
    > argument.
    Even a "void Test()" lets LabVIEW crash. I now say
    extern "C" {
    void Test();
    void Test() {
    return;
    > The prototype in your C function needs to match the prototype you
    > get from the "Create C File..." Dialog.
    Granted, but quoting the gcc manual: "Good compilers never crash."
    I didn't *start* the VI after all.
    Tschö,
    Torsten.
    Torsten Bronger, aquisgrana, europa vetus

Maybe you are looking for