- •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 |
|
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. |
|
|
|
|
|
ClearMem
syntax void ClearMem(p, size);
ClearMem sets size bytes starting at the address referenced by p to 0.
Parameter |
Type |
Description |
p |
UPtr |
Pointer to block of memory to clear. |
size |
int32 |
Number of bytes to clear. |
|
|
|
MoveBlock
syntax void MoveBlock(ps, pd, size);
MoveBlock moves size bytes from one address to another. The source and destination memory blocks can overlap.
Parameter |
Type |
Description |
ps |
UPtr |
Pointer to source. |
pd |
UPtr |
Pointer to destination. |
size |
int32 |
Number of bytes to move. |
|
|
|
SwapBlock
syntax void SwapBlock(ps, pd, size);
SwapBlock swaps size bytes between the section of memory referred to by ps and pd. The source and destination memory blocks should not overlap.
Parameter |
Type |
Description |
ps |
UPtr |
Pointer to source. |
pd |
UPtr |
Pointer to destination. |
© National Instruments Corporation |
6-11 |
LabVIEW Code Interface Reference Manual |
Chapter 6 Memory Manager Functions
size |
int32 |
Number of bytes to move. |
|
|
|
Handle and Pointer Verification
AZCheckHandle
DSCheckHandle
syntax |
MgErr |
AZCheckHandle(h); |
|||
|
|
MgErr |
DSCheckHandle(h); |
||
|
XXCheckHandle verifies that the specified handle is really a handle. If the handle is |
||||
|
not a real handle, this function returns mZoneErr. |
||||
|
Parameter |
Type |
|
Description |
|
|
h |
UHandle |
Handle to verify. |
||
returns |
MgErr, which can contain the errors in the following list. |
||||
|
Error |
Description |
|
|
|
|
noErr |
No error. |
|
|
|
|
mZoneErr |
Handle or pointer not in specified zone. |
|||
|
|
|
|
|
|
AZCheckPtr
DSCheckPtr
syntax |
MgErr |
AZCheckPtr(p); |
|
MgErr |
DSCheckPtr(p); |
XXCheckPtr verifies that the specified pointer is a pointer allocated with XXNewPtr or XXNewPClr. If the pointer is not a real pointer, this function returns mZoneErr.
|
Parameter |
Type |
Description |
|
p |
UPtr |
Pointer to verify. |
returns |
MgErr, which can contain the errors in the following list. |
||
|
Error |
Description |
|
|
noErr |
No error. |
|
|
mZoneErr |
Handle or pointer not in specified zone. |
|
|
|
|
|
LabVIEW Code Interface Reference Manual |
6-12 |
© National Instruments Corporation |
Chapter 6 Memory Manager Functions
Memory Zone Utilities
AZHeapCheck
DSHeapCheck
syntax |
int32 |
AZHeapCheck(Bool32 |
d); |
|
int32 |
DSHeapCheck(Bool32 |
d); |
XXHeapCheck verifies that the specified heap is not corrupt. This function returns a zero for an intact heap and a nonzero value for a corrupt heap.
|
Parameter |
|
Type |
Description |
|
d |
|
Bool32 |
Dump extensive heap examination to auxiliary |
|
|
|
|
screen. |
returns |
int32, which can contain the errors in the following list. |
|||
|
Value |
|
Description |
|
|
noErr |
|
The heap is intact. |
|
|
mCorruptErr |
The heap is corrupt. |
||
|
|
|
|
|
AZMaxMem
DSMaxMem
syntax |
int32 |
AZMaxMem(); |
|
int32 |
DSMaxMem(); |
|
XXMaxMem returns the size of the largest block of contiguous memory available for |
|
|
allocation. |
|
returns |
int32, the size of the largest block of contiguous memory available for |
|
|
allocation. |
|
|
|
|
© National Instruments Corporation |
6-13 |
LabVIEW Code Interface Reference Manual |
Chapter 6 Memory Manager Functions
AZMemStats
DSMemStats
syntax |
void |
AZMemStats(MemStatRec |
*msrp); |
|
void |
DSMemStats(MemStatRec |
*msrp); |
XXMemStats returns various statistics about the memory in a zone.
Parameter |
Type |
Description |
msrp |
MemStatRec* |
Returns statistics about the zone's free memory in a |
MemStatRec structure. See the Pointers as Parameters section of Chapter 1, CIN Overview, for more information about using this parameter.
A MemStatRec structure is defined as follows.
typedef struct {
int32 totFreeSize, maxFreeSize, nFreeBlocks; int32 totAllocSize, maxAllocSize;
int32 nPointers, nUnlockedHdls, nLockedHdls; int32 reserved [4];
}
The free memory in a zone consists of a number of blocks of contiguous memory. In the MemStatRec structure, totFreeSize is the sum of the sizes of these blocks, maxFreeSize is the largest of these blocks (as returned by XXMaxMem), and nFreeBlocks is the number of these blocks.
Similarly, the allocated memory in a zone consists of a number of blocks of contiguous memory. In the MemStatRec structure, totAllocSize is the sum of the sizes of these blocks and maxAllocSize is the largest of these blocks.
Because there are three different varieties of allocated blocks, the numbers of blocks of each type is returned separately.
nPointers (int32) is the number of pointers. nUnlockedHdls (int32) is the number of unlocked handles. nLockedHdls (int32) is the number of locked handles. Add these three values together to find the total number of allocated blocks.
The four reserved fields are reserved for use by National Instruments.
LabVIEW Code Interface Reference Manual |
6-14 |
© National Instruments Corporation |