Calling LabVIEW DLL from C with 2d array strings

I am trying to write a DLL in C that calls a LabVIEW DLL that has a
number of functions that each return a 2D array of strings which are the formatted
measurements, with column 1 being the measurement name and column 2
being the measurement. I wanted to use the 2D array of strings since
this would give a uniform interface for returning measurements. Ive
cobbled together bits and pieces of messages and example code I've
found here into something that almost works, and was hoping someone
with a little more experience in interfacing C with LabVIEW DLLs would
be able to help me.
Here's a little
snippet from the header file generated when building the LabVIEW DLL:
typedef struct {
long dimSizes[2];
LStrHandle String[1];
} TD1;
typedef TD1 **TD1Hdl;
long __cdecl TestVI(char serialNumber[],  TD1Hdl *formattedMeasurements, char ErrorDescription[], long len);
The "TestVI" VI generates a 2D array of strings. The cell contents and number of rows are random to
simulate different measurement names and measurements.
Here's a snippet for the wrapper class:
class CArgoTestsLabVIEW 
public:
CArgoTestsLabVIEW();
virtual ~CArgoTestsLabVIEW();
// test modules called from parent DLL
BOOL GetResult_LV(CString resultName, double *result);
long TestVI_LV(CString serialNumber);
private:
TD1Hdl m_LVStringArray;
CMapStringToString m_resultMap;
InitMeasurementsArray();
PopulateResultMap();
The "m_LVStringArray" is intended to hold the 2D array of strings that
the test modules spit out. The "m_resultMap" is just for accessing the
measurements from the parent DLL via the "GetResult_LV" function.
The implementation of TestVI_LV is:
long CArgoTestsLabVIEW::TestVI_LV(CString serialNumber)
long rc = 0;
char errStr[BUFFERLEN];
strcpy(errStr,"");
rc = InitMeasurementsArray();
if (rc == 0) {
rc = TestVI(serialNumber.GetBuffer(serialNumber.GetLength()), &m_LVStringArray, errStr, BUFFERLEN);
PopulateResultMap();
return rc;
The accessor functions InitMeasurementsArray and PopulateResultMap are:
long CArgoTestsLabVIEW::InitMeasurementsArray()
MgErr err;
if (m_LVStringArray)
DSDisposeHandle(m_LVStringArray);
m_LVStringArray = (TD1Hdl)DSNewHandle(sizeof(TD1));
// code to check for NULL
// Set number of strings in array to 0
(*m_LVStringArray)->dimSizes[0] = 0;
(*m_LVStringArray)->dimSizes[1] = 0;
// Set total size of array structure. For now it is only as big as the long variable.
err = DSSetHandleSize((UHandle)m_LVStringArray, sizeof(long));
// code to check for error
return 0;
void CArgoTestsLabVIEW::PopulateResultMap()
int numberOfResults;
int i;
int charCnt;
numberOfResults = (*m_LVStringArray)->dimSizes[0];
if (numberOfResults == 0) {
return;
m_resultMap.RemoveAll();
for (i = 0; i < numberOfResults; i++) {
charCnt = (*((*m_LVStringArray)->String[i * 2]))->cnt;
(*((*m_LVStringArray)->String[i * 2]))->str[charCnt] = '\0';
charCnt = (*((*m_LVStringArray)->String[i * 2 + 1]))->cnt;
(*((*m_LVStringArray)->String[i * 2 + 1]))->str[charCnt] = '\0';
m_resultMap.SetAt((LPCTSTR) (*((*m_LVStringArray)->String[i * 2]))->str, (LPCTSTR) (*((*m_LVStringArray)->String[i * 2 + 1]))->str);
The problem I have is that I eventually get an access violation from
the run-time engine if I try to call the test VI in a loop. I'm
obviously having a memory management problem, but it escapes me as to
where the problem is. Anybody have any ideas?

smercurio_fc wrote:
The problem I have is that I eventually get an access violation from the run-time engine if I try to call the test VI in a loop. I'm obviously having a memory management problem, but it escapes me as to where the problem is. Anybody have any ideas?
(*((*m_LVStringArray)->String[i * 2]))->str[charCnt] = '\0';
Hi smercurio,
      Have you solved this?  I don't work with C much anymore, but it looks, here, as if the memory at str[charCnt] isn't yours to address/change.
Is index "charCnt" one char past the end of the String-memory allocated by LabVIEW? 
just an idea!
Hmmm, maybe page 9 is a bit far back to fish in the unanswered posts.
Message Edited by Dynamik on 03-03-2006 02:03 AM
When they give imbeciles handicap-parking, I won't have so far to walk!

Similar Messages

  • How to call labview DLL from C#, passing char, char[], float[], long, short

    Hi,
    I'm having trouble calling labview dll from C# to perform certain function.
    The function supposed to return the values in the float Analysis[] array. However, when I execute it it only returns zero values.
    It seems that some parameters are not properly passed to the dll.
    Below is the function in the header file:
    void __stdcall Optical_Center(char FileDirectory[], long ImagePtr,
        short int Height, short int Width, char ReadFromFile, float Analysis[],
        long lenAnalysis);
    and my corresponding dll import in c#:
    [DllImport(@"SMIA.dll", CharSet = CharSet.Ansi)]
            public static extern void Optical_Center([MarshalAs(UnmanagedType.LPStr)]string FileDirectory, long ImagePtr,
                short Height, short Width,char  ReadFromFile, IntPtr Analysis,
                long lenAnalysis);
    string str = @"C:\SMIA.raw";
    int len = 3;
    long m_lenAnalysis = 3;
    long m_ImagePtr = 0;
    short m_Height = 2464;
    short m_Width = 3280;
    IntPtr m_PtrArray = Marshal.AllocHGlobal(len * Marshal.SizeOf(typeof(float)));
    char m_ReadFromFile = '1';
    Optical_Center(str,m_ImagePtr,m_Height,m_Width,m_ReadFromFile,m_PtrArray,m_lenAnalysis);
    float[] m_Analysis = new float[len];
    Marshal.Copy(m_PtrArray, floatArray,0,len);
    Marshal.FreeHGlobal(m_PtrArray);
    string printstr = "";
    for (int i=0; i<len; i++)
        printstr = printstr + floatArray[i].ToString() + "\n";       
    MessageBox.Show(printstr);
    Appreciate if anyone can help, thanks.
    KL

    I was just about to post the header file of the DLL, when
    I noticed that there's a function called LVDLLStatus.
    This little thingie turned out to be a rather handy tool.
    With that function I found that in the DLL I had a problem
    with another function that prevented the DLL to be correctly
    loaded.
    This other function in the DLL is for generating digital output
    and it worked as it should, when tested from LV.
    Anyway if someone is interested, I got it working by using
    the LoadLibrary and GetProcAddress function, as in the
    source code thatI posted earlier.
    I will investigate what is wrong with that digital output, and
    post into a another thread if I have problems with that.

  • How to call LabVIEW dll from ATL COM dll

    I have tried to call simple LabVIEW 8.6 Dll from win32 test application, class Library.
    I have include LabVIEW generated SharedLib.h file and SharedLib.lib file in the test application which I created as simple win32 console project and also from win32 class Library. I was sucessfully able to call my LabVIEW dll funtion. 
    But when I create ATL COM project and try to add SharedLib.h file and SharedLib.lib file I used to get following erors
    Error 1 error C2733: second C linkage of overloaded function 'StrCatW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 463 
    Error 2 error C2733: second C linkage of overloaded function 'StrCpyW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 464 
    Error 3 error C2733: second C linkage of overloaded function 'StrCpyNW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 465 
    Error 4 error C2733: second C linkage of overloaded function 'StrCmpW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 466 
    Error 5 error C2733: second C linkage of overloaded function 'StrCmpNW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 467 
    these many errors.
    Will some one explain me how to call LabVIEW dll from ATL COM dll.
    Thanks & Regards,
    Jay

    I also had this problem.  My application is unicode-aware, but I was attempting to link it to a library with primitive C-string arguments.  You could dynamically load the DLL as suggested (more work), modify the header files (really not recommended), or if you are feeling lucky you could try fooling the compiler, as I was successfully able to do in Visual Studio 2010, by steering the preprocessor around those functions (assuming you're not using them, of course -- otherwise this probably wouldn't work):
    // prepare for NI extcode.h inclusion. avoid linker errors for this project.
    #define StrCatW(a,b)     IgnoreLinkError_StrCatW(a,b);
    #define StrCpyW(a,b)     IgnoreLinkError_StrCpyW(a,b);
    #define StrCpyNW(a,b,c)  IgnoreLinkError_StrCpyNW(a,b,c);
    #define StrCmpW(a,b)     IgnoreLinkError_StrCmpW(a,b);
    #define StrCmpNW(a,b,c)  IgnoreLinkError_StrCmpNW(a,b,c);
    // header file for my LabView-built DLL (ASCII single-byte character arguments)
    #include <MyLibraryHeader.h>
    // clean up afterwards, put things back to 'normal'
    #undef StrCatW
    #undef StrCpyW
    #undef StrCpyNW
    #undef StrCmpW
    #undef StrCmpNW

  • How to call Labview DLL from VB2005

    Dear all expert,
    I'm a student and very new in Labview programming.
    Currently i have build a simple vi and need to convert it to dll so that i can call it from my VB.net. But the problem is how to call the labview dll from my VB.net?
    I know we must declare function something like this,
    Auto function Bodeplot Lib"..\\Bodeplot.dll" (Byval Val1 as double, Byval Val2 as double,...) as double
    but how to determine Val1, Val2 (and so on) is input for which data?  if my vi have 10 input (frequency, Kc,Fcz,Fcp,Wzrhp,Wp,k,Wz,Beta and Operation) ? and how to select the output (my application have 3 possible output : magnitup loop,phase loop, and degree loop)
    In addition, since I'm using Labview 8.0 , and as i know apllication  builder for this version cannot convert vi to dll which contain Mathscript (but unfortunely, my vi all use Mathscript), so really hope someone can help me to convert my vi to dll using Labview 8.2 (which remove this limitation).
    here I'm attach my Vi and really hope someone willing to help.
    Thank you.
    Attachments:
    bodeplot.vi ‏1049 KB

    On Sep 17, 6:40 am, cckoh <[email protected]> wrote:
    > Dear all expert,
    > I'm a student and very new in Labview programming.
    > Currently i have build a simple vi and need to convert it to dll so that i can call it from my VB.net. But the problem is how to call the labview dll from my VB.net?
    > &nbsp;
    > I know we must declare function something like this,
    > &nbsp;
    > Auto function Bodeplot Lib"..\\Bodeplot.dll" (Byval Val1 as double, Byval Val2 as double,...) as double
    > &nbsp;
    > but how&nbsp;to determine Val1, Val2 (and so on) is input for which data?&nbsp; if my&nbsp;vi have&nbsp;10 input (frequency, Kc,Fcz,Fcp,Wzrhp,Wp,k,Wz,Beta and Operation)&nbsp;? and how to&nbsp;select the output (my application have 3 possible output : magnitup loop,phase loop, and degree loop)
    > &nbsp;
    > In addition, since I'm using Labview 8.0 , and as i know apllication&nbsp; builder for this version cannot convert vi to dll which contain Mathscript (but unfortunely, my vi all use Mathscript), so really hope someone can help me to convert my vi to dll using Labview 8.2 (which&nbsp;remove this limitation).
    > &nbsp;
    > here I'm attach my Vi and really hope someone willing to help.
    > &nbsp;
    > Thank you.
    > &nbsp;
    >
    > bodeplot.vi:http://forums.ni.com/attachments/ni/170/272124/1/bodeplot.vi
    If you insist on using Labview with your project then you should
    consider using ActveX in place of using a dynamic link library to
    interface to your VB.net code. You don't need "Application Builder"
    if you use ActiveX. The Student, Basic and Full development versions
    of Labview for Windows come with ActiveX capability. For more
    information on ActiveX look up the subject ActiveX in Labview's Help
    File.
    Howard

  • Calling LabView DLLs from C/C++

    Hi!
    Is it possible to call functions in the LabView DLLs directly from
    C/C++?
    Functions like InvChiSquare in lvanlys.dll has "Adapt to Type" void *
    parameters. How do I specify those parameters from C/C++?
    I have tried to use the "Build Shared Library" function in LabView to
    make a wrapper dll of the "Inv Chi Square Distrubution" vi, but when I
    call this function in the dll from C/C++ the function never returns.
    Other functions in the same dll that does not use functions in the
    lvanalys.dll are working ok.
    Regards
    Hans Forssell

    There are 2 great places to get infomraiton on passing data to dlls, and the data types used. First would be this manual. Using External Code in LabVIEW
    The second is the dll examples that ship with LabVIEW 7.0. Go to LabVIEW 7.0\examples\dll\data passing\Call Native Code.vi

  • How to call labview DLL from visual C++?

    Hi,
    I'm trying to call a LV DLL from a VC++ application
    by using the LoadLibrary and GetProcAddress functions.
    The DLL contains a simple sum function. The Library is
    loaded correctly, but the result is always 0.0000.
    I have loaded a VC++ DLL in a similar way and it works
    correctly. Also, I have tested the DLL by loading it in LV,
    and it works correctly. The calling convention is defined
    to be stdcall in LV Application Builder.
    I have also tried this solution, but I will get a compiler error
    from one the header files that are created by the LV when
    the DLL is made. The error comes from this line
    typedef char                int8;
    and the error states that
    ..\fundtypes.h(107) : error C2371: 'int8' : redefinition; different basic types
    If someone knows of newer tutorial(for LV 8.2) or knows how to use those
    LoadLibrary and GetProcAddress function for LV DLLs, I will appreciate the
    information greatly.
    Below is the code that I'm using for loading the LV DLL.
    Thanks
    #include "stdafx.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <map>
    #include <windows.h>
    int _tmain(int argc, _TCHAR* argv[])
        HINSTANCE LVLib = LoadLibrary(TEXT("Testdll"));
        typedef double (__stdcall *MYPROC)(double, double);
        if (LVLib != NULL)
            MYPROC ProcAdd = (MYPROC) GetProcAddress(LVLib, "Add");
            if (ProcAdd != NULL)
                double d = (ProcAdd)(5.5, 6.6);
                printf("sum = %f\n", d);
            else
                printf("Invalid function pointer\n");
        else
            printf("Failed to load the library\n");
        return 0;

    I was just about to post the header file of the DLL, when
    I noticed that there's a function called LVDLLStatus.
    This little thingie turned out to be a rather handy tool.
    With that function I found that in the DLL I had a problem
    with another function that prevented the DLL to be correctly
    loaded.
    This other function in the DLL is for generating digital output
    and it worked as it should, when tested from LV.
    Anyway if someone is interested, I got it working by using
    the LoadLibrary and GetProcAddress function, as in the
    source code thatI posted earlier.
    I will investigate what is wrong with that digital output, and
    post into a another thread if I have problems with that.

  • Calling LabView dlls from VB

    I am using the .net environment and this NI e xample...
    http://zone.ni.com/devzone/cda/epd/p/id/3990
    which is just a simple dll that outputs some numbers.
    I get the following error
    Attempting managed execution inside OS Loader lock. Do not attempt to
    run managed code inside a DllMain or image initialization function
    since doing so can cause the application to hang.
    and it crashes! Any suggestions?

    This issue is addressed in the forum linked by Ravens Fan.
    Donovan

  • How to call a labview dll from excel-VBA?

    How to call a simple Labview DLL from Excel VBA?
    I have seen examples of DLL calls from VB but does it work the same way for VBA? I have 2000 excel and Labview 8.5. I created the DLL and tried to call it from VBA using the same type of code as in NI's website example(ofcourse its a bit diff with 8.5)
    http://zone.ni.com/devzone/cda/tut/p/id/...
    BUT it errors out when called from excel
    ERROR: The object invoked has disconnected from its client

    You would need to provide more details about the LabVIEW DLL, such as the prototypes of the functions (VIs) that you're trying to call, and your actual VBA code. Specifically, what object you're trying to create. You should also make sure the Run-Time Enginer is installed, as well as any required libraries such as the VISA Run-Time if you're using VISA. Have you made sure to enable the ActiveX server for the DLL?
    A search yielded the following items that you may wish to peruse:
    http://forums.ni.com/ni/board/message?board.id=170&message.id=261345&requireLogin=False
    http://forums.ni.com/ni/board/message?board.id=170&message.id=45099&requireLogin=False
    http://forums.ni.com/ni/board/message?board.id=170&message.id=299209&requireLogin=False
    http://forums.ni.com/ni/board/message?board.id=170&message.id=195846&requireLogin=False

  • Calling LV DLL from VB

    I have a vi that initializes, measures, and releases
    an OSA instrument. I want to call this routine from VB.
    I used Standard calling convention when making DLL from LV.
    Here is my VB declaration:
    Private Declare Sub OSAMeasurement Lib "C:\ADE\OSAMeasurement.dll" Alias "OSADFBMeasurement" _
    (ByVal GPIB As Long, _
    ByVal Serial_Number As String, _
    ByVal FileName As String, _
    ByVal File_Path As String, _
    ByVal Start_Wavelength_nm As Double, _
    ByVal Stop_Wavelength_nm As Double, _
    ByVal Level_Scale_dB As Double, _
    ByVal Res_nm As Double, _
    ByVal Peak_Wavelength As Double, _
    ByVal Peak_Level As Double, _
    ByVal SMSR As Double, _
    ByVal FWHM As Double, _
    ByVal Mode_Offset As Double, _
    ByRef Level_Array() As Double, _
    ByRef Wa
    velength_Array() As Double, _
    ByVal Array_Length As Long)
    Here is my VB call:
    Call OSAMeasurement(Form1.OSA.PrimaryAddress, _
    (strOXM & Form1!txtOPMNumber), _
    (CStr(CInt(dblSetVoltage)) & "v_Scan.txt"), _
    (txtDataStoragePath & strOXM & " " & Form1!txtOPMNumber & "\"), _
    1520, 1620, 5, 1, Peak_Wavelength, Peak_Level, _
    SMSR, FWHM, Mode_Offset, _
    Level_Array, Wavelength_Array, 1001)
    I get RunTime Error "49"
    Bad DLL calling convention
    What is wrong?
    Any suggestions/comments?
    Attachments:
    OSA.zip ‏703 KB

    Basically what i want to do is to call the microchip's dll called "mpusbapi.dll" from VB6. This dll is written in C++. This dll has some basic functions of usb like MPUSBRead() , MPUSBWrite , MPUSBOpen() etc.
    I have made a usb data acquisition card and i want to communicate with this card by means of VB 6. Please tell me or send a tutorial of calling a DLL from VB 6.
    Any help greatly appreciated
    Attachments:
    _mpusbapi.cpp ‏42 KB
    _mpusbapi.h ‏19 KB

  • Call LabVIEW VIs from MATLAB

    Does anybody know of a simple way to call LabVIEW VIs from within a MATLAB m-file?  I would like to be able to write VIs in LabVIEW and then script them (for stochastic analysis, etc.), and think MATLAB would be an awfully convenient way to do this (also useful for data analysis, etc.).  I have looked at LuaVIEW, but it appears to have been largely abandoned.
    Thanks!

    Hello Erik,
    Building it into a DLL as Altenback said is a solid way to do this, and here's a Knowledge Base article that also explains how to transfer data in binary or ASCII format, How do I Transfer Data Between The MathWorks, Inc. MATLAB® Software Development Environment and LabV... 
    Thank you,
    Deborah Y.
    LabVIEW Real-Time Product Marketing Manager
    Certified LabVIEW Architect
    National Instruments

  • Calling a dll from VB

    Hi all
    I have two questions
    1) I know about the visual Basic 6 but what is measurement studio for visual Basic 6?
    2) Can anyone tell me how to call a dll from Visual Basic 6? Any example for this ?
    Any help greatly appreciated :-)

    Basically what i want to do is to call the microchip's dll called "mpusbapi.dll" from VB6. This dll is written in C++. This dll has some basic functions of usb like MPUSBRead() , MPUSBWrite , MPUSBOpen() etc.
    I have made a usb data acquisition card and i want to communicate with this card by means of VB 6. Please tell me or send a tutorial of calling a DLL from VB 6.
    Any help greatly appreciated
    Attachments:
    _mpusbapi.cpp ‏42 KB
    _mpusbapi.h ‏19 KB

  • Calling external dll from oracle 8i pl/sql

    Hi
    I am facing in calling extrenal dll from pl/sql.
    Steps followed by me are
    1.
    create library crc_lib as
    'D:\ORACLE\ORA81\RDBMS\EXTPROC\EXTPROC\my.DLL';
    2.
    CREATE OR REPLACE FUNCTION check_file_crc (f1 char)
    RETURN BOOLEAN AS
    EXTERNAL LIBRARY CRC_LIB
    NAME "Check_File_CRC"
    LANGUAGE C;
    3. CREATE OR REPLACE PROCEDURE CRC_TEST (f1 varchar2) AS
         RetValue varchar2(100);
    BEGIN
         if check_file_crc(f1) then
              RetValue := '0';
         else
              RetValue := '1';
         end if;
         DBMS_OUTPUT.PUT_LINE(RetValue);
    EXCEPTION
         when others then
         DBMS_OUTPUT.PUT_LINE(sqlerrm|| 'I am in exception');
    END;
    4.ET SERVEROUTPUT ON
    SQL> exec crc_test('C:\file.txt');
    ORA-28576: lost RPC connection to external procedure agent
    I am in exception
    I have tsnames.ora as
    EXTPROC_CONNECTION_DATA =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    (CONNECT_DATA =
    (SID = PLSExtProc)
    (PRESENTATION = RO)
    and listner.ora as
    SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (SID_NAME = PLSExtProc)
    (ORACLE_HOME = D:\Oracle\ora81)
    (PROGRAM = extproc)
    I am unable to resolve problem please help.
    Prashant
    Edited by: prashant13 on Jul 23, 2009 11:27 AM

    See if MOS note      468404.1 proves helpful here (though not meant for your version of Oracle).

  • Calling ora:processXQuery from bpel with parameters

    I am trying to call ora:processXQuery from bpel with parameters. I am using SOA Suite 11.1.1.7
    ora:processXQuery('selectVersionNumber.xq',bpws:getVariableData('XML_FILE_VAR','/ns4:InputParameters'),"OBJ_ID_VAR","OBJ_ID_INNER_VAR", bpws:getVariableData('OBJ_ID_VAR'),bpws:getVariableData('OBJ_ID_INNER_VAR'))
    selectVersionNumber.xq :
    xquery version "1.0";
    declare namespace ns4="http://www.example.org";
    let $item := //ns4:P_RELATIONSHIP_TBL
    for $x in $item/P_RELATIONSHIP_TBL_ITEM
        for $y in $x/ns4:P_RELATIONSHIP_TBL_INNER/ns4:P_RELATIONSHIP_TBL_ITEM_INNER
        where $x/ns4:OBJECT_ID = $OBJ_ID_VAR and $y/ns4:OBJECT_ID=$OBJ_ID_INNER_VAR
            return <objectVersion>{ $y/ns4:OBJECT_VERSION_NUMBER }</objectVersion>
    but ora:processXQuery dosen't accept more than two arguments. Is there any work around?

    Create a specific xml schema for your xquery as a input and pass that. Extract the required values from xml in your xquery.

  • Web dynpro abap : Call an application from another with parameters

    Hi ,
    Could you please tell me how to call an application from another with parameters?
    Thanks a lot
    Karim

    * Construct the URL
          call method cl_wd_utilities=>construct_wd_url
            exporting
            application_name              = 'APPLICATIION_NAME'
          importing
            out_absolute_url              = g_url.
    * Append parameters to URL
      data: g_par1 = lv_value. " value of your parameter
      call method cl_http_server=>append_field_url
        exporting
          name  = 'PAR1' " Parameter name
          value = g_par1
        changing
          url   = g_url.
    * Call the Application
      DATA lo_window_manager TYPE REF TO if_wd_window_manager.
      DATA lo_api_component  TYPE REF TO if_wd_component.
      DATA lo_window         TYPE REF TO if_wd_window.
      lo_api_component  = wd_comp_controller->wd_get_api( ).
      lo_window_manager = lo_api_component->get_window_manager( ).
      lo_window         = lo_window_manager->create_external_window(
                       url = g_url ).
      lo_window->open( ).

  • Building DLLs from VIs with array as output

    Is there any special way to build DLLs from VIs having arrays as outputs. Suppose I have a VI "Random" with input "nrand" and output an array "the_random2". When I build DLL from the VI, I have something like this in my header file
    void __stdcall Random(long nrand, double the_random2[]);
    Now it returns void. So I have to pass the array as pointer and retrieve it. If I use Mathscript to load the DLL and call this function, how do I pass the pointer to the array "the_random2"? Simply speaking, any useful method to build DLLs with array outputs and the right way to call them from Mathscript would be appreciated.
    Regards
    NRK

    Hi,
    Building DLLs in LabVIEW is described in this tutorial.  
    Mathscript can call shared libraries such as DLLs, however make sure
    that they are compliant with the supported data types as stated here in
    this help page.  All supported functions for calling/loading shared libraries is described here. 
    Note that these functions are not supported with the base package.  The
    details of the sytax of each function is described in their specific
    help page.
    Hope this helps!
    Regards,
    Nadim
    Applications Engineering
    National Instruments

Maybe you are looking for