Quantcast
Channel: Measurement Studio for VB6 topics
Viewing all articles
Browse latest Browse all 323

In VB6, how do I pass the array returned by ImagetoArray() to a C++ function by reference not by value?

$
0
0

I have been puzzled by the problem for days, and your help is sincerely appreciated.

I use VB6 and a NI1430 board to grab images from a UNIQ1830-CL camera.  After the image is obtained, I use ImageToArray to get the data, and pass the array to a C++ function to do centroiding for a subregion of the image.  The C++ function resides in a custom-made dll named  'mathLib'.

 

The signature of the C++ function is:

STDMETHODIMP Cmath::centroid(VARIANT *image, int left, int width, int top, int height, VARIANT *theCentroid) ;

 

To call the C function from VB6, I do:

dim centroid as variant

dim imageData as variant

...

 

let imageData = CWIMAQImage.ImageToArray 

Let centroid = mathLib.centroid(imageData, regionLeft, regionWidth, regionTop, regionHeight)  

...

 

I tried the NI1430 and a board from another company.  The 'imageData' look the same in VB6 - both are 2D Integer arrays of size 1024x1024.  However when the array is passed to the C++ routine, there is a 5 times difference in processing speed.  I examined the array on the C++ side.  It turns out that the 'vt' field has different values.  For the array coming from NI1430, vt = 0x2002 (i.e. VT_ARRAY & VT_I2), which incates it's passed in by value.  While for the array coming from the other board, vt = 0x6002 (i.e. VT_BYREF & VT_ARRAY & VT_I2), which says it's passed by reference.  Since I call the C++ function for many sub regions in the image, and each call results in a new copy of the NI image array, the slowness in speed for the NI board is profound.

 

So my question is: In VB6, how do I get a reference to the array returned by ImagetoArray() ?  I've tried to obtain the address of the array, pass the first element of the array, etc.  none of them worked.  Please help.

 


Viewing all articles
Browse latest Browse all 323

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>