CALLING DLL: Labview or CVI?

I'm going to start a new project using Testand and Labview or CVI. In this project I will make a lot of calls to C++ functions packed at a DLL file. The Dll was prepared and compiled using MVC++.The function prototypes are not simple & contain structures, pointers and typdefs's.
Is it possible to call the functions from Testand,Labview,CVI?
Is it easier to call the functions from CVI compared to Labview?
Thanks,
Ofer

ofer_o wrote:
I'm going to start a
new project using Testand and Labview or CVI. In this project I will
make a lot of calls to C++ functions packed at a DLL file. The Dll was
prepared and compiled using MVC++.The function prototypes are not
simple & contain structures, pointers and typdefs's.
Is it possible to call the functions from Testand,Labview,CVI?
Is it easier to call the functions from CVI compared to Labview?
Thanks,
Ofer
Jon already mentioned that CVI will be a lot easier to deal with this than LabVIEW.
BUT!!! Make sure the DLL exports standard C functions instead of C++.
LabWindows CVI (and LabVIEW even more so) can only link to globally
exported C functions. C++ classes are completely out of reach for both
and C++ compiled global functions have both the problem of taking
sometimes C++ parameter types as well as the name decoration added by
the C++ compiler to all function names.
Rolf Kalbermatter
Rolf Kalbermatter
CIT Engineering Netherlands
a division of Test & Measurement Solutions

Similar Messages

  • How do I call a LabView VI via dll to display its control panel in a tab of my uir in LabWindows

    Hi User Community,
    I am trying to build a LabWindows Top Level Control Panel to call individual LabView VI's, which have been compiled into a dll.
    I have no problem using the CmtScheduleThreadPoolFunction to start a new thread that calls these VI's however, I'm having trouble trying to get the display that comes up in it's own window to display in a tab of my existing UIR.
    I've compiled the DLLs to always display the VI Control Panel window when running - and usually it covers the whole screen you can't see the LabWindows window until the VI completes.
    Is there a definitive guide to LabWindows Windows/Panels/Tabs? Or does anyone have experience with this? Any help would be appreciated.

    Hello,
    I would suggest reviewing the Programming with Panels and Programming with Tabs CVI Help documents.  I think that this can be done with the LoadPanelEx function.  Let me know how it goes!
    As well, I found some example code to get you started.
    How to access individual controls within multiple tabs in CVI
    http://decibel.ni.com/content/docs/DOC-14187
    Regards,
    Shawn S. | NIC
    Instrument Driver/IVI PSE
    National Instruments

  • Q: Must one use special LabVIEW types (e.g. float64) for DLLs in LabWINDOWS/CVI?

    Hello,
    I have recently started compiling C code using LabWindows/CVI, and have successfully called a simple DLL function from within LabVIEW.
    I have a question about the types defined in LabVIEW's extcode.h file:
    These are defined to explicitly quantify the number of bits used for each data type (e.g. float64 instead of float) in order to eliminate ambiguity across compilers.
    When I am using LabWindows/CVI to compile, do I need to use the LabView numeric types defined in LabView's extcode.h, or can I use the standard C types (int, float, etc.)?
    Is there a distinction between having to use these special types for CIN versus shared library calls in LabVIEW?
    Thanks
    in advance,
    Frenk

    You do not have to use the defines in extcode.h, but you certainly can if you want to.
    The float64 is equivalent to CVI's "double", and the float32 is equivalent to CVI's "float".
    These correspond to the double- and single-precision types in the IEEE Standard for Floating Point Arithmetic, IEEE-754.
    I hope this helps.
    Brian

  • Application crashes when calling DLL built with LabVIEW 2011

    Hello everybody,
    Our application calls DLLs built with LabVIEW 2010 SP1. We installed LabVIEW 2011 and built some DLLs. So far so good. If we start our application and run 2010 DLLs it still works fine. If we run a 2011 DLL just once no error happens, but if we try to run the same 2011 DLL our application crashes reporting the error below. I saved the code for 2010 version and built a DLL and it works fine. Does anyone know why?
    Thank you in advance.
    #Date: Fr, 16. Sep 2011 16:25:25
    #OSName: Microsoft Windows XP Service Pack 3
    #OSVers: 5.1
    #OSBuild: 2600
    #AppName: PasTA
    #Version: 11.0f2 32-bit
    #AppKind: AppLib
    #LabVIEW Base Address: 0x30000000
    16.09.2011 16:25:26.181
    Crash 0x0: Crash caught by NIER
    File Unknown(0) : Crash: Crash caught by NIER
    minidump id: 8a779b3f-51d7-4864-8e4d-6ab0195cd158
    ExceptionCode: 0xC0000005
    N
    0x3072C804 - lvrt <unknown> + 0
    0x3072CBB8 - lvrt <unknown> + 0
    0x7C864191 - KERNEL32 <unknown> + 0
    0x7C83AB50 - KERNEL32 <unknown> + 0
    0x00000000 - PasTA <unknown> + 0
    Attachments:
    error.PNG ‏11 KB

    On that note, you should be able to create DLLs in 2010 and run them with 2011, correct??  In my case, I have a 2010 built DLL (talking to sbRIO), most of the functions work when run in 2011, but a couple of them lock up LabVIEW on the desktop (but not the sbRIO), no lock ups happen with 2010 on the desktop.

  • Call dll in labview

    "Hi All,
    I have to get data from USB camera, I have following functions in DLL.
    DLLINOUT HANDLE WINAPI CC_Open( LPCSTR CameraName , ULONG CameraNumber , CC_CAPTURE_MODE CaptureMode ) ;
    and
    DLLINOUT BOOL WINAPI CC_CaptureSingle( HANDLE Cam , PVOID Buffer , ULONG TransferSize , CC_TRIGGER_MODE TriggerMode , USHORT TimeOut , OVERLAPPED * pUserOverlapped );
    When I open hardware with function cc_open I am getting handle to an object. How can I store this object and pass it to CC_CaptureSingle function?
    Another question is when I call CC_CaptureSingle I am getting pointer on the 2 dimension array �PVOID buffer� how can I get this array in Labview?"

    hi,
    you can do this two thing.
    1. Create your new DLL with (your DLL will call camera's DLL) one big function my_capture_image() and insert you do CC_Open(), CC_CapruteSingle() and CC_Close(). And to LabView you pass only Array whit image data. And you don't have problems with HANDLE. But you must allocate memory for image array in LabVIEW before you call this DLL!!! [Or use LabVIEW C function for reallocating memory]
    2. You must identify type of HANDEL variable. And you can change type of this variabile. But when HANDLE variable is structure it is hard pass this structure to LabVIEW.
    If you use LabVIEW 7.1 look example 'Call DLL.vi' it is great!
    Have a nice day.
    JCC

  • "HOW to use Labview call Dll compiled by VC++"

    "hello,I use VC++ compile a DLL,and i want to call DLL Function in LABVIEW program.But there is a dll function
    when i call it in labview.There is error.The prototype of Dll Function that make error is "USHORT DLLFUN __stdcall IBWRT(unsigned short dev_address,const char *pstrWrite)",The second paramenter is a char pointer,
    and the paramenter pass a command which content is
    "MEASURE:CURRENTC? 1A,0.001MA".
    When i use VC++ to call this function,i program followed:
    CString m_wrt;
    int ReturnW;
    m_wrt="MEASURE:CURRENTC? 1A,0.001MA";
    char buffer[40];
    strcpy(buffer,m_wrt);
    ReturnW=IBWRT(4,buffer);
    and this call is correct.
    But when i use labview to call this function.ther
    e is
    error.So, who can help me,to tell me how to call this
    function.Thanks."

    Are you asking about porting code or calling C++ code in LabVIEW?  As far as porting code, there's no easy way to move code back and forth between LabVIEW and C++.  However, if you are trying to call C++ code in LabVIEW, you can compile it as a DLL and call it in LabVIEW using the Call Library Function node.
    Chad B. » National Instruments » ni.com

  • How to pass Visa Resoure Name parameter to labview dll in labwindows​​/cvi

    Hi, everyone
    I build a dll from labview, the prototype is : double  getchannelpower(double f, uintptr_t *VISAResourceName);
    I don't know how to pass VISAResourceName to this function.How can I get the VISAResourceName of this type(uintptr_t *)?
    Is it related to the paremeter ViPSession in function viOpen(ViSession sesn,ViRsrc rn,ViAccessMode am,ViUInt32 ti,ViPSession vi)?
    BRs,
    lotusky

    1. uintptr_t *VISAResourceName in the labview dll is connected to viOpen function as input parameter internally.
    2.I can call the labview dll in labview via CLF Node, when the VISAResourceName parameter is set  to Numeric(32-bit int or 32-bit usigned int) OR Adapt to data(Handle by Value). And I got the value of the VISAResourceName parameter, which is 0; When I directly connect 0 to the dll, it still works. But in labwindows, when  I pass 0 to the VISAResourceName parameter of the dll function, I got a FATAL RUN-TIME ERROR: The program has caused a 'General Protection' fault.
    mkossmann 已写:
    Could you check what exactly uintptr_t *VISAResourceName in your labview dll does.Might it be that it is connected to the labviews Dll internal ViOpen() ViSession output parameter ?.   And the name VISAResourceName is misleading.
    Another idea would be that Labview uses 32bit Unicode for the ResourceName. And you have to convert the C String to that Unicode first.

  • Private dll calling in Labview

    Hi everyone, (refinement of my question)
    I have two dlls. One contains public functions which I call from Labview. The functions in this dll call functions in the other (private) dll. However, how do I tell Labview where to find this private dll?
    I have tried installing the dll in the system path directory. I have also put the dll in various different places relevant to Labview (e.g. in the directory of the Labview executable file). However, none seem to work (.
    Is there an option in Labview where I can set paths to dlls?
    Any help will be gratefully received.
    Ciao,
    Matthew Banham (colleague of Francois)

    > I have two dlls. One contains public functions which I call from
    > Labview. The functions in this dll call functions in the other
    > (private) dll. However, how do I tell Labview where to find this
    > private dll?
    >
    > Is there an option in Labview where I can set paths to dlls?
    >
    The problem is that the system loader is what handles the dependent
    DLLs. Since LV knows about the primary DLL, we try multiple locations,
    the path in the dialog, next to the VI, in the LV search paths, and
    finally we ask the system to look in their places. LV doesn't know
    about the dependent DLL, and it is up to the system to find it. I'd
    recommend trying the system or windows folder again. That should be the
    right solution.
    An off the wall thought that might h
    elp would be to add a dependency
    directly into LV by making a DLL node that calls in the the "private"
    DLL. You don't actually have to call it, you can place it in a case
    structure with a constant set the other way. Anyway, this will cause LV
    to look for the DLL, and I think it might help if nothing else works.
    Greg McKaskle

  • Calling Dlls from LabVIEW

    LabVIEW Gurus:
    I am working with some software engineers who have no experience in LabVIEW. Unfortunately I have little experience in C/C++ to make sense of their inquiry.  
    Basically we are dealing with “Data Marshalling”. I will call a DLL and issue a command (string) and get back a 2-D array and an integer. So far so good.
    The C/C++ programmer requested that I provide them with a pointer/memory address in which they will store data, so I can read it once the dll returns the array and integer. I browsed through the example online http://decibel.ni.com/content/docs/DOC-1690 and thought that if I wanted to read from the dll, the process is a simple as calling the appropriate function and configure the parameter (no pointers needed).
    So, is there a specific way that they need to write the C/C++ code to be used in LabVIEW? Or what else to I have to take into consideration?
    Thank you,
    Santiago 

    That example is pretty simplistic as it only deals with integers. In this case no pointers are required since everything is returned by value. When you're dealing with arrays, however, you need to deal with pointers. If you open the Example Finder (Help -> Find Examples) and search for "dll" you will see the "Call DLL" example. That contains many examples of how to call DLL functions with a wide variety of datatypes. I strongly suggest looking at that example. There is also a chapter in the LabVIEW Help on calling DLLs (Fundamentals -> Calling Code Written in Text-Based Progamming Language).
    You have 2 things to consider:
    You're dealing with arrays - this means you typically need to pre-allocate the memory in LabVIEW, and it sounds like that's what the DLL expects you to do. This amounts to using the Initialize Array function to create your 2D array of the appropriate size and datatype.
    You may be dealing with a C++ DLL. LabVIEW can only interface to C DLLs. This doesn't mean that you can't create a DLL in C++, but it does mean that the C++ programmers need to add an extern "C" modifier to the function calls, otherwise you get name mangling, and LabVIEW won't be able to call the DLL. The DLL programmers should know what that means.

  • I want to call DLLs generated in LAbWindows CVI in Borland C++ (BCB 6)

    Hi,
    I want to call DLLs generated in LabWindows CVI in Borland C++, I am using BCB 6 and LabWindows CVI 8.
    I am able to call these functions in VC++, But getting following error in BCB
    ":[Linker Error] 'D:\GAJANAN\CVIDLL.LIB' contains invalid OMF record, type 0x21 (possibly COFF)"
    Please somebody suggest me how to solve this problem.
    Thanks and Regards
    Gajanan

    Duplicate post.

  • Calling DLL using LabVIEW 7.1

    so, i have this DLL which might be compiled using Visual Studio 2003 or Visual Studio 2005.NET.
    question is: Can i call DLL functions using LabVIEW 7.1? has anyone tried it and has any issues loading the DLL?
    i think i have everything right, as far as the configuration of 'Call Library Function Node' is concerned, but i get the
    'error loading DLL - application has failed to start because application config is incorrect'.
    can you please verify if .NET is not causing me issues? i think DLL assembly should be the same wheather it's VStudio6
    or .NET, but can anyone confirm that's not the issue? Thanks...

    Yes.
    If you dll is generated by C/C++, using Call Library Function node.
    If it is generated by .net, using constructor node.
    http://forums.ni.com/ni/board/message?board.id=170&message.id=206959#M206959

  • Labview fails to call dll after Migration from 2010 to 2014

    An error  'Failed to load dynamic library because of missing external symbols or dependencies or because of invalid file format' occures everytime the labview framework tries to call dll. Has anybody come across this problem before.???

    priyanka0101 wrote:
    [...] But this dll consists of APIs which [...]
    This sounds as if the DLL requires some other components, most likely other DLLs. Is it possible that these are not installed on the target machine?
    Do you run LV 2010 and 2014 in parallel on the same machine for checking?
    Norbert
    CEO: What exactly is stopping us from doing this?
    Expert: Geometry
    Marketing Manager: Just ignore it.

  • Does anybody can give me a simple example about the labview programme calling dll ?

      Does anybody can give me a simple example about the labview programme calling dll ?And the dll is also writed  by using labview .I just want to study  the process of the labview programme calling dll file.Thank you!

    Hi,
    Please click on "Find Examples" in the "Getting Started Window"
     A window named "NI Example Finder" will pop up.
     In this go to "Search" tab
    Type "DLLs"
    You will see a lot of examples. 
    If you're online, you'll see user examples too...

  • Error Building DLL, LabView 8.2

    Hello everybody,
    I'm building a
    CVI application. I need some functions of LabView (related to time
    series analysis), so I'm trying to build DLLs with the .VIs I need. I
    followed all the steps necesary and visited all the related topics at
    ni.com. I always get the following error:
    Visit the Request Support page at ni.com/ask to learn more about resolving this problem. +¡
    Use the following information as a reference:
    Error -2147221480 occurred at Building DLL stub.
    This can be caused by illegal function or parameter
    names. Please verify your names are legal C identifiers and do not
    conflict with LabVIEW headers
    This error code is undefined. No one has provided a
    description for this code, or you might have wired a number that is not
    an error code to the error code input.
    Once, I got a correct DLL with no errors, so it should be possible for others.
    This is an example of what I'm trying to compile:
    And this is what appears, only for a moment, at the end of the
    compiling (it didn't appear when I manage to build with no errors):
    I'm using: LabView 8.2, LabWindows CVI 8.5, NI-DAQ 8.5, Windows XP (SP2)
    Any suggestion is really appreciated.
    Maybe another way to use this functions in CVI (I need functions related to spectral estimation, ARMA; MUSIC,...)
    thank you!
    Eduardo Tamargo
    Spain

    Hi Tamargo,
         The following KnowledgeBases may help you find out what is happening:
    Creating and Calling LabVIEW DLLs with Various Data Types from Microsoft Visual C++
    What are the Differences Between "Array Data Pointer", "Array Handle", and "Array Handle Pointer"?
    Calling a LabVIEW DLL from C with an Array in a Cluster as a Parameter
         Have you tried developing a very simple VI with an array as an input parameter and checking if the same problem takes place when you build the DLL?
    Regards,
    David Oña

  • The problem about call dll from VB....

    Dear All.
    I have a device and  VB dll file.I want to use labview to call  dll.But Labview show "An Exception occurred within the external code ..."
    Below is  to call this dll details.
    1、FindHardware:
    Call it at beginning when load program first, it can let program auto detect printer port address and model of dso scope.
    parament
    winversion:
    winversion = 2  "Windows NT,XP"
    UIP: open UIP(2048) array
    UCP:open  UCP(1023, 1023 + 11, 6)  array
    return:
    board_model:
    dso2902_128 = 27
    Then is my program
    Could somebody tell me what's wrong?
    Attachment file is this dll.
    http://us.f1.yahoofs.com/bc/500cf3ac/bc/dll/dll.ra​r?bfd1QSDBkHPgKI9c
    Thanks.
    由 Samyang 在 10-09-2005 07:14 AM 上編輯的訊息

    I can't say I understand the documentation snippet you provides, and I also can't access the DLL, but here are a couple things...
    1. I doubt very highly that a VB DLL is built with the C calling convension. I believe you should try the stdcall instead.
    2. You have the winversion being passed by pointer, but the docs make it look like a regular integer. Is that correct?
    3. Your board model is being passed by value, but it is listed as a return value in the docs. That would indicate an actual return value or a parameter passed by reference.
    My guess is that one or more of the above is causing the stack to get corrupted or an invalid pointer to be accessed and that is generating the error. Is there anyway to see the document (pdf or webpage)?
    Brian Tyler
    http://detritus.blogs.com/lycangeek

Maybe you are looking for

  • How do I use google street view for ipad and iPhone on ios 6 to 6.1.3?

    I don't think there are any other ways to find google street view of roads and places even If I surf on the Internet. Please help.

  • Why can't I use my gmail as my Adobe ID?

    It tells me "That Adobe ID is not available.  Please try another address."  Who else would be using it??  It's my own email!  Does Adobe object to all gmail addresses?

  • How can I get my equalizer settings to work??

    Since installation of vs 7. and 7.01, I find that my eq settings that I have meticulously and painstakingly set on almost all songs are not always working. Specifically: 1) When playing songs, if you were to select "show equalizer", you would find th

  • Name of the constraint

    Hi all, Can anyone suggest me When creating table, which constraint have index associated, that is generated automatically by oracl Thanking you Seshu

  • Thread Contention

    I've written a producer/consumer type of application. the producer receives data input (speed and time) over a serial connection and places it in a queue of sorts, set up much like the examples at Sun. The consumer picks up the values, calculates a s