VariantArrayLockUnlock (C++)

From RAD Studio Code Examples
Jump to: navigation, search

Description

This example shows how to use the VarArrayOf, VarArrayLock, and VarArrayUnlock functions from the Variants unit. You need to use a pointer to hold the memory addresses to the values from the array you create. This example calculates the mean of some values that are read and stored in a Variant array.

Code

float CalculateMean(Variant array)
{
	int len;
	float lsum;
	Variant *pElem;
	int i;

	lsum = 0;

	/* Lock the array and obtain the pointer to the memory that holds the actual values. */
	pElem = (Variant*)VarArrayLock(array);

	/* Obtain the length of the array. */
	len = VarArrayHighBound(array, 1) - VarArrayLowBound(array, 1) + 1;

	/* Iterate over the elements of the array and calculate the sum. */
	for (i = 0; i < len; i++)
		lsum += (float)pElem[i];

	/* Unlock the array. */
	VarArrayUnlock(array);

	/* Calculate the mean. */
	return(lsum / len);
}

int _tmain(int argc, _TCHAR* argv[])
{
	double x;
	int l = 0;
	Variant* arr = NULL;
	Variant array;

	/* Loop until one issues the stop condition (X = 0). */
	while (true)
	{
		/* Read a new element from the console. */
		printf("Enter a double value (0 for stop): ");
		scanf("%lf", &x);

		/* The stop condition */
		if (x == 0)
			break;

		l++;
		arr = (Variant*)realloc(arr, l * sizeof(Variant));
		/* Add an element to the Variant array. */
		arr[l - 1] = x;
	}

	/* Create a variant array that has variant elements. */
	if (l == 0)
	{
		return -1;
	}
	array = VarArrayOf(arr, l - 1);

	/* Write the "mean" results to the console. */
	printf("Mean of the given values is: %lf\n", CalculateMean(array));

	return 0;
}

Uses