
- •Worldwide Technical Support and Product Information
- •National Instruments Corporate Headquarters
- •Worldwide Offices
- •Important Information
- •Warranty
- •Copyright
- •Trademarks
- •WARNING REGARDING USE OF NATIONAL INSTRUMENTS PRODUCTS
- •Contents
- •About This Manual
- •Conventions
- •Related Documentation
- •Calling Code in Various Platforms
- •Characteristics of the Two Calling Approaches
- •Details of Call Library Function
- •Details of a CIN
- •Calling Shared Libraries
- •Figure 2-1. Call Library Function Dialog Box
- •Calling Conventions (Windows)
- •Parameters
- •Calling Functions That Expect Other Data Types
- •Building a Shared Library (DLL)
- •Task 1: Build the Function Prototype in LabVIEW
- •Task 2: Complete the .c File
- •Required Libraries
- •Task 3: Build a Library Project in an External IDE
- •Figure 2-2. Creating a Project in Visual C++
- •Figure 2-3. Setting the Use run-time library control, Microsoft Visual C++
- •Gnu C or C++ Compilers on Solaris, Linux, or HP-UX
- •Metrowerks CodeWarrior on Power Macintosh
- •Calling External APIs
- •Common Pitfalls with the Call Library Function
- •Incorrect Function Name
- •Data Types
- •Constants
- •Calling Conventions
- •Example 1: Call a Shared Library that You Built
- •Configuration of Call Library Function
- •Create Front Panel
- •Create the Block Diagram
- •Example 2: Call a Hardware Driver API
- •Figure 2-4. VI That Calls Hardware
- •Example 3: Call the Win32 API
- •Table 2-1. Mapping Win32 Data Types to Standard C Data Types
- •Table 2-2. Mapping Win32 Data Types to LabVIEW Data Types
- •Constants
- •Table 2-3. Selected Constants for MessageBox
- •Figure 2-5. Combining Function Constants in LabVIEW
- •Determining the Proper Library and Function Name
- •Unicode Versions and ANSI Versions of Functions
- •Configuring a Call to the Win32 API
- •Figure 2-6. Configuring Call Library Function to call the Win32 API
- •Figure 2-7. Block Diagram for a Call to the Win32 API
- •Figure 2-8. Running a LabVIEW Call to the Win32 API
- •Additional Examples of LabVIEW Calls to DLLs
- •Debugging DLLs and Calls to DLLs
- •Troubleshooting the Call Library Function
- •Troubleshooting your DLL
- •Troubleshooting Checklist
- •Module Definition Files
- •Array and String Options
- •Arrays of Numeric Data
- •String Data
- •Figure 2-9. The LabVIEW String Format
- •Figure 2-10. The Pascal String Format
- •Figure 2-11. The C String Format
- •Array and String Tip
- •Supported Languages
- •Macintosh
- •Microsoft Windows
- •Solaris, Linux, and HP-UX
- •Resolving Multithreading Issues
- •Making LabVIEW Recognize a CIN as Thread Safe
- •Using C Code that is Thread Safe
- •Creating a CIN
- •Step 1. Set Up Input and Output Terminals for a CIN
- •Input-Output Terminals
- •Output-Only Terminals
- •Step 2. Wire the Inputs and Outputs to the CIN
- •Step 3. Create a .c File
- •Step 4. Compile the CIN Source Code
- •Compile on Macintosh
- •Microsoft Windows
- •Solaris 2.x
- •HP-UX and Linux
- •gcc Compiler
- •Step 5. Load the CIN Object Code
- •LabVIEW Manager Routines
- •Pointers as Parameters
- •Debugging External Code
- •DbgPrintf
- •Windows
- •UNIX
- •Passing Parameters
- •Parameters in the CIN .c File
- •Passing Fixed-Size Data to CINs
- •Scalar Numerics
- •Scalar Booleans
- •Refnums
- •Clusters of Scalars
- •Return Value for CIN Routines
- •Examples with Scalars
- •Creating a CIN That Multiplies Two Numbers
- •Passing Variably Sized Data to CINs
- •Alignment Considerations
- •Arrays and Strings
- •Paths
- •Clusters Containing Variably Sized Data
- •Resizing Arrays and Strings
- •SetCINArraySize
- •NumericArrayResize
- •Examples with Variably Sized Data
- •Concatenating Two Strings
- •Working with Clusters
- •Manager Overview
- •Basic Data Types
- •Scalar
- •char
- •Dynamic
- •Memory-Related
- •Constants
- •Memory Manager
- •Memory Allocation
- •Memory Zones
- •Using Pointers and Handles
- •File Manager
- •Identifying Files and Directories
- •Path Specifications
- •File Descriptors
- •File Refnums
- •Support Manager
- •CIN Routines
- •Data Spaces and Code Resources
- •One Reference to the CIN in a Single VI
- •Loading a VI
- •Unloading a VI
- •Loading a New Resource into the CIN
- •Compiling a VI
- •Running a VI
- •Saving a VI
- •Aborting a VI
- •Multiple References to the Same CIN in a Single VI
- •Multiple References to the Same CIN in Different VIs
- •Single-Threaded Operating Systems
- •Multithreaded Operating Systems
- •Code Globals and CIN Data Space Globals
- •Examples
- •Memory Manager Functions
- •Support Manager Functions
- •Mathematical Operations
- •ASCIITime
- •AZCheckHandle/DSCheckHandle
- •AZCheckPtr/DSCheckPtr
- •AZDisposeHandle/DSDisposeHandle
- •AZDisposePtr/DSDisposePtr
- •AZGetHandleSize/DSGetHandleSize
- •AZHandAndHand/DSHandAndHand
- •AZHandToHand/DSHandToHand
- •AZHeapCheck/DSHeapCheck
- •AZHLock
- •AZHNoPurge
- •AZHPurge
- •AZHUnlock
- •AZMaxMem/DSMaxMem
- •AZMemStats/DSMemStats
- •AZNewHandle/DSNewHandle
- •AZNewHClr/DSNewHClr
- •AZNewPClr/DSNewPClr
- •AZNewPtr/DSNewPtr
- •AZPtrAndHand/DSPtrAndHand
- •AZPtrToHand/DSPtrToHand
- •AZPtrToXHand/DSPtrToXHand
- •AZRecoverHandle/DSRecoverHandle
- •AZSetHandleSize/DSSetHandleSize
- •AZSetHSzClr/DSSetHSzClr
- •BinSearch
- •BlockCmp
- •Cat4Chrs
- •ClearMem
- •CPStrBuf
- •CPStrCmp
- •CPStrIndex
- •CPStrInsert
- •CPStrLen
- •CPStrRemove
- •CPStrReplace
- •CPStrSize
- •CToPStr
- •DateCString
- •DateToSecs
- •FAddPath
- •FAppendName
- •FAppPath
- •FArrToPath
- •FCopy
- •FCreate
- •FCreateAlways
- •FDepth
- •FDirName
- •FDisposePath
- •FDisposeRefNum
- •FEmptyPath
- •FExists
- •FFlattenPath
- •FFlush
- •FGetAccessRights
- •FGetDefGroup
- •FGetEOF
- •FGetInfo
- •FGetPathType
- •FGetVolInfo
- •FileNameCmp
- •FileNameIndCmp
- •FileNameNCmp
- •FIsAPath
- •FIsAPathOfType
- •FIsAPathOrNotAPath
- •FIsARefNum
- •FIsEmptyPath
- •FListDir
- •FLockOrUnlockRange
- •FMakePath
- •FMClose
- •FMOpen
- •FMove
- •FMRead
- •FMSeek
- •FMTell
- •FMWrite
- •FName
- •FNamePtr
- •FNewDir
- •FNewRefNum
- •FNotAPath
- •FPathCmp
- •FPathCpy
- •FPathToArr
- •FPathToAZString
- •FPathToDSString
- •FPathToPath
- •FRefNumToFD
- •FRefNumToPath
- •FRelPath
- •FRemove
- •FSetAccessRights
- •FSetEOF
- •FSetInfo
- •FSetPathType
- •FStrFitsPat
- •FStringToPath
- •FTextToPath
- •FUnFlattenPath
- •FVolName
- •GetALong
- •HexChar
- •HiByte
- •HiNibble
- •IsAlpha
- •IsDigit
- •IsLower
- •IsUpper
- •LoByte
- •Long
- •LoNibble
- •LStrBuf
- •LStrCmp
- •LStrLen
- •LToPStr
- •MilliSecs
- •MoveBlock
- •NumericArrayResize
- •Offset
- •PPStrCaseCmp
- •PPStrCmp
- •Printf
- •PStrBuf
- •PStrCaseCmp
- •PStrCat
- •PStrCmp
- •PStrCpy
- •PStrLen
- •PStrNCpy
- •PToCStr
- •PToLStr
- •QSort
- •RandomGen
- •SecsToDate
- •SetALong
- •SetCINArraySize
- •StrCat
- •StrCmp
- •StrCpy
- •StrLen
- •StrNCaseCmp
- •StrNCmp
- •StrNCpy
- •SwapBlock
- •TimeCString
- •TimeInSecs
- •ToLower
- •ToUpper
- •Unused
- •Word
- •Glossary

About This Manual
|
|
This manual describes the LabVIEW programming objects that you use to |
|
|
call compiled code from text-based programming languages: the Call |
|
|
Library Function and the Code Interface Node. This manual includes |
|
|
reference information about libraries of functions, memory and file |
|
|
manipulation routines, and diagnostic routines that you can use with calls |
|
|
to external code. |
Conventions |
|
|
|
|
|
|
|
The following conventions appear in this manual: |
» |
|
The » symbol leads you through nested menu items and dialog box options |
|
|
to a final action. The sequence File»Page Setup»Options directs you to |
|
|
pull down the File menu, select the Page Setup item, and select Options |
|
|
from the last dialog box. |
|
|
This icon denotes a tip, which alerts you to advisory information. |
|
|
|
|
|
|
|
|
This icon denotes a note, which alerts you to important information. |
|
|
This icon denotes a caution, which advises you of precautions to take to |
|
|
avoid injury, data loss, or a system crash. |
bold |
Bold text denotes items that you must select or click on in the software, |
|
|
|
such as menu items and dialog box options. Bold text also denotes |
|
|
parameter names. |
italic |
Italic text denotes variables, emphasis, a cross reference, or an introduction |
|
|
|
to a key concept. This font also denotes text that is a placeholder for a word |
|
|
or value that you must supply. |
monospace |
Text in this font denotes text or characters that you should enter from the |
|
|
|
keyboard, sections of code, programming examples, and syntax examples. |
|
|
This font is also used for the proper names of disk drives, paths, directories, |
|
|
programs, subprograms, subroutines, device names, functions, operations, |
|
|
variables, filenames and extensions, and code excerpts. |
monospace bold |
Bold text in this font denotes the messages and responses that the computer |
|
|
|
automatically prints to the screen. This font also emphasizes lines of code |
|
|
that are different from the other examples. |
© National Instruments Corporation |
xiii |
Using External Code in LabVIEW |

About This Manual
monospace italic |
Italic text in this font denotes text that is a placeholder for a word or value |
|
that you must supply. |
Platform |
Text in this font denotes a specific platform and indicates that the text |
|
following it applies only to that platform. |
Related Documentation
The following document contains information that you might find helpful as you read this manual:
•LabVIEW User Manual
Sun users might also find the following document helpful:
•Sun Workshop CD-ROM, Sun Microsystems, Inc., U.S.A.
Linux users might also find the following document helpful:
•The GNU C Compiler Reference Manual, Free Software Foundation, 1989-2000.
Windows users might also find the following documents helpful:
•Microsoft Windows documentation set, Microsoft Corporation, Redmond, WA, 1992-1995
•Microsoft Windows Programmer’s Reference, Microsoft Corporation, Redmond, WA, 1992-1995
•Win32 Programmer’s Reference, Microsoft Corporation, Redmond, WA, 1992-1995
•Microsoft Visual C++ CD-ROM, Microsoft Corporation, Redmond, WA, 1997
Using External Code in LabVIEW |
xiv |
www.ni.com |

1
Introduction
This manual discusses several methods in LabVIEW to call code written in other languages.
•Use platform-specific protocols.
•Use Call Library Function to call the following types of shared libraries:
–Dynamic Link Libraries (DLL) in Windows
–Code Fragments on the Macintosh
–Shared Libraries on UNIX
•Create a Code Interface Node to call code written specifically to link to VIs.
Also, to convert an instrument driver written in LabWindows/CVI you can select Tools»Instrumentation»Import CVI Instrument Driver and invoke the LabWindows/CVI Function Panel Converter. Refer to
LabVIEW Help for more information about this converter.
Calling Code in Various Platforms
This section describes the differences between running Windows and UNIX applications from within your VIs and running Macintosh applications from within your VIs.
(Windows and UNIX) Use the System Exec VI. Use the simple System Exec VI on the Functions»Communication palette to run a command line from your VI. The command line can include any parameters supported by
the application you want to launch.
If you can access the application through TCP/IP, you might be able to pass data or commands to the application. Refer to the documentation for the application for a description of its communication capability. If you are a LabVIEW user, refer to the Using LabVIEW with TCP/IP and UDP
Application Note for more information about techniques for using networking VIs to transfer information to other applications. You also can use many ActiveX LabVIEW tools to communicate with other applications.
© National Instruments Corporation |
1-1 |
Using External Code in LabVIEW |