⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctolv.h

📁 动态链接库的调用问题............
💻 H
字号:
/* This header file contains the LV data structures and the list of functions 
   this dll exports.  A brief explanation of how each type of data is stored in
   LabVIEW memory is described.

*/
#include "extcode.h"
#include <ansi_c.h>

// Specific for CVI compilier to ensure data is packed by 1 byte.  
// For other compiliers there are settings to force 1-byte alignment.
// In MSVC++ 6.0 under Project>>Settings C/C++ Tab, in the category 
// for Code Generation, make sure the struct alignment is set to 1 
// byte to achive the same result.
#pragma pack(1)

// A 2-D array of 16 bit integers. The first parameters is an array of sizes.
// Since there are only 2 elements in the array, it's a 2-D array with each element
// in the array specifying how many numbers are in that dimension.  If the elements
// were 4 and 5, data would contain a 4x5 matrix.  Notice that even though this is a 2-D
// array, it is represented as a 1-D array of contiguous memory with 4X5 elements.  
// After the array of dimensions comes the matrix of data.
typedef struct {
  	int32 dimSizes[2];
  	int16 data[1];
} TD2;
// LabVIEW can pass handles to structures.  A handle is a pointer 
// to a pointer to the structure. 
typedef TD2 **TD2Hdl; //TD2Hdl is a handle 


// A 1-D array of doubles.  The first 32 bits are used to 
// store the size of the array.  Then the array of numbers follows 
// immediately afterwards
typedef struct {
	int32 dimSize;
	float64 arg1[1];
	} TD1;
typedef TD1 **TD1Hdl;

// A 1-D array of booleans
typedef struct {
	int32 dimSize;
	LVBoolean buf[1];
} LVBoolArray;
typedef LVBoolArray **LVBoolArrayHdl;

// A 1-D array of handles pointing to strings (ie an array of strings)
typedef struct {
	int32 dimSize;
	LStrHandle Strings[1];
} LVStringArray;
typedef LVStringArray **LVStrArrayHdl;

// A cluster with a double, string, double array, and a boolean in it
typedef struct {
  	float64 lvDouble;
  	LStrHandle lvString;
  	TD1Hdl lvDoubleArray;
  	LVBoolean lvBool;
} LVCluster;

// Tells CVI to align structures by 1 byte instead of default 8, corresponds 
// with above pragma command.
#pragma pack()


// The functions

// Modifies the contents of a 1-D array (NOTE it is passed as a double*) So LV 
// data types aren't required.  This method is convient, but crashing LV can 
// occur if you write past bounds of array.
int32 __cdecl Modify1DArray(double* in_array, int32 size);

// Does the same thing as above example, but uses LV data structure with size 
// of array built in.  This helps make it easier to keep track of size to 
// prevent writing past bounds.
int32 __cdecl ModifyLV1DArray(TD1Hdl in_array);

// Dynamically resizes a 1-D array to size and fills with data
int32 __cdecl Dynamic1DArrayResize(TD1Hdl in_array, int32 size);

// Modifies the contents of a 2-D array passed in from LabVIEW as a double*, so size
// information is required
int32 __cdecl Modify2DArray(double* in_array, int32 nrows, int32 ncols); 

// Modifies the contents of 2-D array passed as a handle to a LabVIEW structure, so 
// size information is in the structure.
int32 __cdecl Modify2DLVArray(TD2Hdl in_array);  

// Dynamically resizes a 2-D array and fills with new data
int32 __cdecl Dynamic2DArrayResize(TD2Hdl in_array, int32 nrows, int32 ncols);

// Modifies contents of string, can't change size of string though (NOTE it is a 
// char*, so size of the string passed in is not known.  Can use strlen to get 
// length.  (see C code)
int32 __cdecl ModifyString (char* in_string);  

// Modify a String (exactly same as above), but passes string as a LabVIEW string 
// instead of a C string
int32 __cdecl ModifyLVString(LStrHandle in_array);

// Dynamically changes size of string in LabVIEW
int32 __cdecl DynamicStringResize(LStrHandle in_string, int32 size);

// Dynamically creates an array of strings with different lengths for each string.  
// The array has size number of strings
int32 __cdecl DynamicStringArrayResize(LVStrArrayHdl in_array, int32 size);    

// Dynamically creates an array of booleans.
int32 __cdecl Dynamic1DBoolArrayResize(LVBoolArrayHdl in_array, int32 size);

// Modifies the contents of a cluster passed in from LabVIEW with an  
// array of numbers, a string, a boolean, and a number
int32 __cdecl ModifyCluster(LVCluster *in_cluster);    

// Note all LV passes handles to all these datatypes, except a cluster which is 
// passed as a pointer to the structure

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -