- •Important Information
- •Warranty
- •Copyright
- •Trademarks
- •Organization of This Manual
- •Conventions Used in This Manual
- •Related Documentation
- •Customer Communication
- •Introduction
- •Classes of External Code
- •Supported Languages
- •Macintosh
- •Microsoft Windows 3.1
- •Microsoft Windows 95 and Windows NT
- •Solaris
- •Steps for Creating a CIN
- •1. Place the CIN on a Block Diagram
- •2. Add Input and Output Terminals to the CIN
- •Input-Output Terminals
- •Output-Only Terminals
- •3. Wire the Inputs and Outputs to the CIN
- •4. Create .c File
- •Special Macintosh Considerations
- •5. Compile the CIN Source Code
- •Macintosh
- •THINK C for 68K (Versions 5-7)
- •Symantec C++ 8.0 for Power Macintosh
- •Metrowerks CodeWarrior for 68K
- •Metrowerks CodeWarrior for Power Macintosh
- •Microsoft Windows 3.x
- •Watcom C Compiler
- •Microsoft Windows 95 and Windows NT
- •Microsoft SDK C/C++ Compiler
- •Visual C++ for Windows 95 or Windows NT
- •Solaris 1.x
- •Solaris 2.x
- •6. Load the CIN Object Code
- •LabVIEW Manager Routines
- •Online Reference
- •Pointers as Parameters
- •Debugging External Code
- •DbgPrintf
- •Debugging CINs Under Windows 95 and Windows NT
- •Debugging CINs Under Sun or Solaris
- •Debugging CINs Under HP-UX
- •Introduction
- •CIN .c File
- •How LabVIEW Passes Fixed Sized Data to CINs
- •Scalar Numerics
- •Scalar Booleans
- •Refnums
- •Clusters of Scalars
- •Return Value for CIN Routines
- •Examples with Scalars
- •1. Place the CIN on the Block Diagram
- •2. Add Two Input and Output Terminals to the CIN
- •3. Wire the Inputs and Outputs to the CIN
- •4. Create the CIN Source Code
- •5. Compile the CIN Source Code
- •Macintosh
- •THINK C for 68K and Symantec C++
- •Microsoft Windows 3.x
- •Watcom C Compiler
- •Microsoft Windows 95 and Windows NT
- •Microsoft SDK Compiler
- •Microsoft Visual C++ Compiler
- •Solaris 1.x, Solaris 2.x, and HP-UX
- •6. Load the CIN Object Code
- •Comparing Two Numbers, Producing a Boolean Scalar
- •How LabVIEW Passes Variably Sized Data to CINs
- •Alignment Considerations
- •Arrays and Strings
- •Paths (Path)
- •Clusters Containing Variably Sized Data
- •Resizing Arrays and Strings
- •SetCINArraySize
- •NumericArrayResize
- •Examples with Variably Sized Data
- •Concatenating Two Strings
- •Working with Clusters
- •CIN Routines
- •Data Spaces and Code Resources
- •CIN Routines: The Basic Case
- •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
- •Reentrancy
- •Code Globals and CIN Data Space Globals
- •Examples
- •Using Code Globals
- •Using CIN Data Space Globals
- •Calling a Windows 3.1 Dynamic Link Library
- •Calling a 16-Bit DLL
- •1. Load the DLL
- •2. Get the address of the desired function
- •3. Describe the function
- •4. Call the function
- •Example: A CIN that Displays a Dialog Box
- •The Block Diagram
- •The CIN Code
- •Compiling the CIN
- •Optimization
- •Introduction
- •Creating Shared External Subroutines
- •External Subroutine
- •Macintosh
- •THINK C Compiler and CodeWarrior 68K Compiler
- •MPW Compiler
- •Solaris 1.x, Solaris 2.x, and HP-UX
- •Calling Code
- •Macintosh
- •THINK C Compiler
- •CodeWarrior 68K Compiler
- •MPW Compiler
- •Solaris 1.x, Solaris 2.x, and HP-UX
- •Simple Example
- •External Subroutine Example
- •Compiling the External Subroutine
- •Macintosh
- •THINK C Compiler and CodeWarrior 68K Compiler
- •MPW Compiler
- •Microsoft Windows 3.1
- •Watcom C Compiler
- •Microsoft Windows 95 and Windows NT
- •Solaris 1.x, Solaris 2.x, and HP-UX
- •Calling Code
- •Compiling the Calling Code
- •Macintosh
- •THINK C Compiler
- •CodeWarrior 68K Compiler
- •MPW Compiler
- •Microsoft Windows 3.1
- •Watcom C Compiler
- •Microsoft Windows 95 and Windows NT
- •Solaris 1.x, Solaris 2.x, and HP-UX
- •Introduction
- •Basic Data Types
- •Scalar Data Types
- •Booleans
- •Numerics
- •Complex Numbers
- •char Data Type
- •Dynamic Data Types
- •Arrays
- •Strings
- •C-Style Strings (CStr)
- •Pascal-Style Strings (PStr)
- •LabVIEW Strings (LStr)
- •Concatenated Pascal String (CPStr)
- •Paths (Path)
- •Memory-Related Types
- •Constants
- •Memory Manager
- •Memory Allocation
- •Static Memory Allocation
- •Dynamic Memory Allocation: Pointers and Handles
- •Memory Zones
- •Using Pointers and Handles
- •Simple Example
- •Reference to the Memory Manager
- •Memory Manager Data Structures
- •File Manager
- •Introduction
- •Identifying Files and Directories
- •Path Specifications
- •Conventional Path Specifications
- •Empty Path Specifications
- •LabVIEW Path Specification
- •File Descriptors
- •File Refnums
- •Support Manager
- •Allocating and Releasing Handles
- •Allocating and Releasing Pointers
- •Manipulating Properties of Handles
- •AZHLock
- •AZHPurge
- •AZHNoPurge
- •AZHUnlock
- •Memory Utilities
- •ClearMem
- •MoveBlock
- •SwapBlock
- •Handle and Pointer Verification
- •Memory Zone Utilities
- •File Manager Data Structures
- •File/Directory Information Record
- •File Type Record
- •Path Data Type
- •Permissions
- •Volume Information Record
- •File Manager Functions
- •Performing Basic File Operations
- •FCreate
- •FCreateAlways
- •FMClose
- •FMOpen
- •FMRead
- •FMWrite
- •Positioning the Current Position Mark
- •FMSeek
- •FMTell
- •Positioning the End-Of-File Mark
- •FGetEOF
- •FSetEOF
- •Flushing File Data to Disk
- •FFlush
- •FExists
- •FGetAccessRights
- •FGetInfo
- •FGetVolInfo
- •FSetAccessRights
- •FSetInfo
- •Getting Default Access Rights Information
- •FGetDefGroup
- •FListDir
- •FNewDir
- •Copying Files
- •FCopy
- •Moving and Deleting Files and Directories
- •FMove
- •FRemove
- •Locking a File Range
- •FLockOrUnlockRange
- •Matching Filenames with Patterns
- •FStrFitsPat
- •Creating Paths
- •FAddPath
- •FAppendName
- •FAppPath
- •FEmptyPath
- •FMakePath
- •FNotAPath
- •FRelPath
- •Disposing Paths
- •FDisposePath
- •Duplicating Paths
- •FPathCpy
- •FPathToPath
- •Extracting Information from a Path
- •FDepth
- •FDirName
- •FName
- •FNamePtr
- •FVolName
- •FArrToPath
- •FFlattenPath
- •FPathToArr
- •FPathToAZString
- •FPathToDSString
- •FStringToPath
- •FTextToPath
- •FUnFlattenPath
- •Comparing Paths
- •FIsAPath
- •FIsAPathOrNotAPath
- •FIsEmptyPath
- •FPathCmp
- •Determining a Path Type
- •FGetPathType
- •FIsAPathOfType
- •FSetPathType
- •Manipulating File Refnums
- •FDisposeRefNum
- •FIsARefNum
- •FNewRefNum
- •FRefNumToFD
- •FRefNumToPath
- •Byte Manipulation Operations
- •Mathematical Operations
- •For THINK C Users
- •RandomGen
- •String Manipulation
- •BlockCmp
- •CPStrCmp
- •CPStrIndex
- •CPStrInsert
- •CPStrRemove
- •CPStrReplace
- •CPStrSize
- •CToPStr
- •HexChar
- •IsAlpha
- •IsDigit
- •IsLower
- •IsUpper
- •LStrCmp
- •LToPStr
- •PPStrCaseCmp
- •PPStrCmp
- •PStrCaseCmp
- •PStrCat
- •PStrCmp
- •PStrCpy
- •PStrNCpy
- •PToCStr
- •PToLStr
- •StrCat
- •StrCmp
- •StrCpy
- •StrLen
- •StrNCaseCmp
- •StrNCmp
- •StrNCpy
- •ToLower
- •ToUpper
- •Utility Functions
- •BinSearch
- •QSort
- •Time Functions
- •ASCIITime
- •DateCString
- •DateToSecs
- •MilliSecs
- •SecsToDate
- •TimeCString
- •TimeInSecs
- •Microsoft Windows 3.1, Windows 95, and Windows NT
- •Macintosh
- •How do I debug my CIN?
- •Can LabVIEW be used to call a DLL in Windows?
- •Glossary
- •Index
|
|
|
Chapter 6 Memory Manager Functions |
|
|
Parameter |
Type |
Description |
|
|
h |
UHandle |
Application zone handle to lock. |
|
returns |
MgErr, which can contain the errors in the following list. |
|||
|
Error |
Description |
|
|
|
noErr |
No error. |
|
|
|
mZoneErr |
Handle or pointer not in specified zone. |
||
|
|
|
|
|
AZHPurge
syntax void AZHPurge(h);
AZHPurge marks the memory referenced by the application zone handle h as purgeable. This means that in tight memory conditions the memory manager can perform an AZEmptyHandle on h. Use AZReallocHandle() to reuse a handle if the manager purges it.
If you mark a handle as purgeable, check the handle before using it to see if it has become an empty handle.
|
Parameter |
Type |
Description |
|
h |
UHandle |
Application zone handle to mark as purgeable. |
|
|
|
|
AZHNoPurge |
|
|
|
syntax |
void |
AZHNoPurge(h); |
|
|
AZHNoPurge marks the memory referenced by the application zone handle h as |
||
|
unpurgeable. |
|
|
|
Parameter |
Type |
Description |
|
h |
UHandle |
Application zone handle to mark as unpurgeable. |
|
|
|
|
AZHUnlock |
|
|
|
syntax |
MgErr |
AZHUnlock(h); |
© National Instruments Corporation |
6-7 |
LabVIEW Code Interface Reference Manual |
Chapter 6 Memory Manager Functions
AZHUnlock unlocks the memory referenced by the application zone handle h so that it can be moved. This means that the memory manager can move the block of memory to which the handle refers if other memory operations need space.
|
Parameter |
Type |
Description |
|
h |
UHandle |
Application zone handle to unlock. |
returns |
MgErr, which can contain the errors in the following list. |
||
|
Error |
Description |
|
|
noErr |
No error. |
|
|
mZoneErr |
Handle or pointer not in specified zone. |
|
|
|
|
|
Memory Utilities
AZHandAndHand
DSHandAndHand
syntax |
MgErr |
AZHandAndHand(h1, |
h2); |
|
MgErr |
DSHandAndHand(h1, |
h2); |
XXHandAndHand appends the data referenced by h1 to the end of the memory block referenced by h2.
The function resizes handle h2 to hold h1 and h2 data. If h1 is an AZ handle, you should lock it, because this routine can move memory.
|
Parameter |
Type |
Description |
|
|
h1 |
UHandle |
Source of data to append to h2. |
|
|
h2 |
UHandle |
Initial handle, to which the data of h1 is appended. |
|
returns |
MgErr, which can contain the errors in the following list. |
|||
|
Error |
Description |
|
|
|
noErr |
No error. |
|
|
|
mFullErr |
Not enough memory to perform operation. |
||
|
mZoneErr |
Handle or pointer not in specified zone. |
||
|
|
|
|
|
AZHandToHand
DSHandToHand
LabVIEW Code Interface Reference Manual |
6-8 |
© National Instruments Corporation |
Chapter 6 Memory Manager Functions
syntax |
MgErr |
AZHandToHand(hp); |
|
MgErr |
DSHandToHand(hp); |
XXHandToHand copies the data referenced by the handle to which hp points into a new handle, and returns a pointer to the new handle in hp.
You can use this routine to copy an existing handle into a new handle. The old handle remains allocated. This routine writes over the pointer that is passed in, so you should maintain a copy of the original handle.
|
Parameter |
Type |
Description |
|
hp |
UHandle * |
Pointer to handle to duplicate. A pointer to the |
|
|
|
resulting handle is returned in this parameter. See |
|
|
|
the Pointers as Parameters section of Chapter 1, |
|
|
|
CIN Overview, for more information about using |
|
|
|
this parameter. |
returns |
MgErr, which can contain the errors in the following list. |
||
|
Error |
Description |
|
|
noErr |
No error. |
|
|
mFullErr |
Not enough memory to perform operation. |
|
|
mZoneErr |
Handle or pointer not in specified zone. |
|
|
|
|
|
AZPtrAndHand
DSPtrAndHand
syntax |
MgErr |
AZPtrAndHand(p, h, size); |
|
|
MgErr |
DSPtrAndHand(p, h, size); |
|
XXPtrAndHand appends size bytes from the address referenced by p to the end of the |
|||
memory block referenced by h. |
|
||
Parameter |
Type |
|
Description |
p |
UPtr |
|
Source of data to append to h. |
h |
UHandle |
Handle to which the data of p is appended. |
|
size |
int32 |
|
Number of bytes to copy from p. |
returns |
MgErr, which can contain the errors in the following list. |
||
Error |
Description |
|
|
noErr |
No error. |
|
© National Instruments Corporation |
6-9 |
LabVIEW Code Interface Reference Manual |
Chapter 6 Memory Manager Functions
|
mFullErr |
|
Not enough memory to perform operation. |
|
mZoneErr |
|
Handle or pointer not in specified zone. |
|
|
|
|
AZPtrToHand |
|
|
|
DSPtrToHand |
|
|
|
syntax |
MgErr |
AZPtrToHand(p, hp, size); |
|
|
|
MgErrD |
SPtrToHand(p, hp, size); |
XXPtrToHand creates a new handle of size bytes and copies size bytes from the address referenced by p to the handle.
|
Parameter |
Type |
Description |
|
|
p |
UPtr |
Source of data to copy to the handle pointed to by |
|
|
|
|
hp. |
|
|
hp |
UHandle * |
Pointer to new handle. See the Pointers as |
|
|
|
|
Parameters section of Chapter 1, CIN Overview, for |
|
|
|
|
more information about using this parameter. |
|
|
size |
int32 |
Number of bytes to copy from p to the new handle. |
|
returns |
MgErr, which can contain the errors in the following list. |
|||
|
Error |
Description |
|
|
|
noErr |
No error. |
|
|
|
mFullErr |
Not enough memory to perform operation. |
||
|
|
|
|
|
AZPtrToXHand
DSPtrToXHand
syntax |
MgErr |
AZPtrToXHand(p, |
h, |
size); |
|
MgErr |
DSPtrToXHand(p, |
h, |
size); |
XXPtrToXHand copies size bytes from the address referenced by p to the existing handle h, resizing h, if necessary, to hold the results.
Parameter |
Type |
Description |
p |
UPtr |
Source of data to copy to the handle h. |
h |
UHandle |
Destination handle. |
size |
int32 |
Number of bytes to copy from p to the existing |
|
|
handle. |
LabVIEW Code Interface Reference Manual |
6-10 |
© National Instruments Corporation |