Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations wOOdy-Soft on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

An unkown error...

Status
Not open for further replies.

Japoneis

Programmer
Sep 3, 2003
16
BR
Hi,
I´m having a problem when I try to run an application of mine on some PCs...
At the startup of the app, the following error message shows up...
-- "variant array is locked"

... and the app just doesn´t starts!

I already installed the app on lots of PCs and it works just fine. I don´t know why this error occurs on some others...

Any hints???
 
This is what I found in the Win32 SDK Reference:


typedef struct FARSTRUCT tagSAFEARRAY {

unsigned short cDims; // Count of dimensions in this array.
unsigned short fFeatures; // Flags used by the SafeArray
// routines documented below:

#if defined(WIN32)

unsigned long cbElements; // Size of an element of the array;
// Does not include size of
// pointed-to data.
unsigned long cLocks; // Number of times the array has been
// locked without corresponding unlock.

#else

unsigned short cbElements;
unsigned short cLocks;
unsigned long handle; // Unused but kept for compatibility

#endif

void HUGEP* pvData; // Pointer to the data.
SAFEARRAYBOUND rgsabound[1]; // One bound for each dimension.

} SAFEARRAY;


Note that the definition varies, depending on the target operating system platform. On 32-bit Windows systems, both the cbElements and cLocks parameters are unsigned long integers, and the handle parameter is omitted. On 16-bit Windows systems, cbElements and cLocks are unsigned short integers, and the handle parameter has been retained for compatibility with earlier software.

The array rgsabound is stored with the leftmost dimension in rgsabound[0] and the rightmost dimension in rgsabound[cDims - 1]. If an array were specified in C-like syntax as a[2][5], it would have two elements in the rgsabound vector. Element 0 has an lLbound of 0 and a cElements of 2. Element 1 has an lLbound of 0 and a cElements of 5.

The fFeatures flags describe attributes of an array that may affect how the array is released. This allows freeing the array without referencing its containing variant. The bits are accessed using the following constants:

#define FADF_AUTO 0x0001 // Array is allocated on the stack.
#define FADF_STATIC 0x0002 // Array is statically allocated.
#define FADF_EMBEDDED 0x0004 // Array is embedded in a structure.
#define FADF_FIXEDSIZE 0x0010 // Array may not be resized or
// reallocated.
#define FADF_BSTR 0x0100 // An array of BSTRs.
#define FADF_UNKNOWN 0x0200 // An array of IUnknown*.
#define FADF_DISPATCH 0x0400 // An array of IDispatch*.
#define FADF_VARIANT 0x0800 // An array of VARIANTs.

#define FADF_RESERVED 0xF0E8 // Bits reserved for future use.


Maybe this is of some help to you. I've italicized the part of which I think could be the problem.

[bobafett] BobbaFet [bobafett]

Everyone has a right to my opinion.
E-mail me at caswegkamp@hotmail.com
 
Japoneis
I assume that your pogram is using variant arrys?
Although Delphi provides this data type and it would seem to be on the face of it:-
A way around checking data sizes.
A way of saving memory space.
But its not normaly good practise to use them. You can get the sort of problems you have seen and also resource usage is increased dramaticaly.




Steve
Those who know me have no need of my name. SD
 
Actually I don´t use variant arrays directly...

I searched around the net and I found out that Midas uses them (don´t know if it´s true)...
Besides Delphi´s original VCL, I´m also using a brazilian report component called "Fortes Reports", witch is very good... (... but I don´t know if it uses variant arrays.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top