- •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
Chapter 6 Function Descriptions
FCopy
MgErr FCopy(oldPath, newPath);
Purpose
Copies a file, preserving the type, creator, and access rights. The file to be copied must not be open. If an error occurs, the new file is not created.
Parameters
Name |
Type |
Description |
|
|
|
|
|
|
oldPath |
Path |
Path of the file or directory you want to copy. |
|
|
|
newPath |
Path |
Path, including filename, where you want to |
|
|
store the new file. |
|
|
|
Return Value
mgErr, which can contain the following errors:
mgArgErr |
A bad argument was passed to the function. Verify the path. |
fNotFound |
File not found. |
fNoPerm |
Access was denied; the file, directory, or disk is locked or |
|
protected. |
fDiskFull |
Disk is full. |
fDupPath |
The new file already exists. |
fIsOpen |
The original file is open for writing. |
fTMFOpen |
Too many files are open. |
mFullErr |
Insufficient memory. |
fIOErr |
Unspecified I/O error. |
6-54 |
www.ni.com |
Chapter 6 Function Descriptions
FCreate
MgErr FCreate(fdp, path, permissions, openMode, denyMode, group);
Purpose
Creates a file with the name and location specified by path and with the specified permissions, and opens it for writing and reading, as specified by openMode. If the file already exists, the function returns an error.
You can use denyMode to control concurrent access to the file from within LabVIEW. You can use the group parameter to assign the file to a UNIX group; in Windows or Macintosh, group is ignored.
If the function creates the file, the resulting file descriptor is stored in the address referred to by fdp. If an error occurs, the function stores 0 in the address referred to by fdp and returns an error.
Note Before you call this function, make sure that you understand how to use the fdp parameter. Refer to the Pointers as Parameters section in Chapter 3, CINs, for more information about using this parameter.
Parameters
Name |
Type |
Description |
|
|
|
|
|
|
fdp |
File * |
Address at which FCreate stores the file |
|
|
descriptor for the new file. If FCreate fails, |
|
|
it stores 0 in the address fdp. Refer to the |
|
|
Pointers as Parameters section in Chapter 3, |
|
|
CINs, for more information about using this |
|
|
parameter. |
|
|
|
path |
Path |
Path of the file you want to create. |
|
|
|
permissions |
int32 |
Permissions to assign to the new file. |
|
|
|
openMode |
int32 |
Access mode to use in opening the file. The |
|
|
following values are defined in the file |
|
|
extcode.h: |
|
|
• openReadOnly—Open for reading. |
|
|
• openWriteOnly—Open for writing. |
|
|
• openReadWrite—Open for both |
|
|
reading and writing. |
|
|
|
© National Instruments Corporation |
6-55 |
Using External Code in LabVIEW |
Chapter 6 Function Descriptions
Name |
Type |
|
Description |
|
|
|
|
|
|
|
|
denyMode |
int32 |
Mode that determines what level of |
|
|
|
concurrent access to the file is allowed. |
|
|
|
The following values are defined in the file |
|
|
|
extcode.h: |
|
|
|
• |
denyReadWrite—Prevents others |
|
|
|
from reading from and writing to |
|
|
|
the file while it is open. |
|
|
• |
denyWriteOnly—Prevents others |
|
|
|
from writing to the file only while it |
|
|
|
is open. |
|
|
• denyNeither—Allows others to |
|
|
|
|
read from and write to the file while |
|
|
|
it is open. |
|
|
|
|
group |
PStr |
UNIX group you want to assign to the new |
|
|
|
file. |
|
|
|
|
|
Return Value
mgErr, which can contain the following errors: mgArgErr
fIsOpen
fNoPerm fDupPath fTMFOpen fIOErr
Using External Code in LabVIEW |
6-56 |
www.ni.com |
Chapter 6 Function Descriptions
FCreateAlways
MgErr FCreateAlways(fdp, path, permissions, openMode, denyMode, group);
Purpose
Creates a file with the name and location specified by path and with the specified permissions, and opens the file for writing and reading, as specified by openMode. If the file already exists, this function opens and truncates the file.
You can use denyMode to control concurrent access to the file from within LabVIEW. You can use the group parameter to assign the file to a UNIX group; in Windows or Macintosh, group is ignored.
If the function creates the file, the resulting file descriptor is stored in the address referred to by fdp. If an error occurs, the function stores 0 in the address referred to by fdp and returns an error.
Note Before you call this function, make sure that you understand how to use the fdp parameter. Refer to the Pointers as Parameters section in Chapter 3, CINs, for more information about using this parameter.
Parameters
Name |
Type |
Description |
|
|
|
|
|
|
fdp |
File * |
Address at which FCreateAlways stores |
|
|
the file descriptor for the new file. If |
|
|
FCreateAlways fails, it stores 0 in the |
|
|
address fdp. Refer to the Pointers as |
|
|
Parameters section in Chapter 3, CINs, for |
|
|
more information about using this parameter. |
|
|
|
path |
Path |
Path of the file you want to create. |
|
|
|
permissions |
int32 |
Permissions to assign to the new file. |
|
|
|
openMode |
int32 |
Access mode to use in opening the file. |
|
|
The following values are defined in the file |
|
|
extcode.h: |
|
|
• openReadOnly—Open for reading. |
|
|
• openWriteOnly—Open for writing. |
|
|
• openReadWrite—Open for both |
|
|
reading and writing. |
|
|
|
© National Instruments Corporation |
6-57 |
Using External Code in LabVIEW |
Chapter 6 Function Descriptions
Name |
Type |
|
Description |
|
|
|
|
|
|
|
|
denyMode |
int32 |
Mode that determines what level of |
|
|
|
concurrent access to the file is allowed. |
|
|
|
The following values are defined in the file |
|
|
|
extcode.h: |
|
|
|
• |
denyReadWrite—Prevents others |
|
|
|
from reading from and writing to |
|
|
|
the file while it is open. |
|
|
• |
denyWriteOnly—Prevents others |
|
|
|
from writing to the file only while it |
|
|
|
is open. |
|
|
• denyNeither—Allows others to |
|
|
|
|
read from and write to the file while |
|
|
|
it is open. |
|
|
|
|
group |
PStr |
UNIX group you want to assign to the new |
|
|
|
file. |
|
|
|
|
|
Return Value
mgErr, which can contain the following errors: mgArgErr
fIsOpen
fNoPerm fDupPath fTMFOpen fIOErr
Using External Code in LabVIEW |
6-58 |
www.ni.com |