Luciano Lucas - MI wrote:
> Hello Everybody,
> 
> I have a big problem.
> I job with image processing in C++, and now i need transfer image array VB
> to DLL VC++.
> 
> My Dll use others Dlls. This Dlls util VARIANT type to transfer image array.
> 
> In Microsoft site help, have one example to transfer bytes array ( VB to
> ActiveX do in VC++)
> 
> Code example to transform bytes array in VARIANT type:
> 
> The problem is :
>       - in VB we create bytes array (512 bytes)
>       - in VC++ the bytes array is larger then 512 bytes.
> 
> Please help me.
> 
>    void CDllDermalogMidApp::VBtoVCtoVB(const VARIANT FAR& Buffer)
>    {
>       // Verify the Variant contains SafeArray of Bytes
>       if (Buffer.vt == (VT_ARRAY | VT_UI1)) {
>          long Dims = SafeArrayGetDim(Buffer.parray);
>          long UpperBounds;
>          long LowerBounds;
> 
>          if (Dims == 1) {
>             SafeArrayGetLBound(Buffer.parray, 1, &LowerBounds);
>             SafeArrayGetUBound(Buffer.parray, 1, &UpperBounds);
> 
>             // Use LowerBounds and UpperBounds to force a specific
>             // Array size as shown here or they can be used to
>             // dynamically create the buffer.
>             if ((LowerBounds == 0) && (UpperBounds == 512)) {
>                // Reference pointer for accessing the SafeArray
>                unsigned char* buff;
>                // Variable to store the data from the SafeArray
>                // could be a global variable or member of CBinDataCtrl
>                // Shown as a local variable for demonstration purpose only
>                unsigned char m_abBinaryData[512];
>                SafeArrayAccessData (Buffer.parray, (void**)&buff);
>                for (int i = 0; i < 512; i++) {
>                   // Handle the binary data in the buffers
>                   // Copying the data passed from VB to VC.
>                   m_abBinaryData[i] = buff[i];
> 
>                   // Modifying the data to be passed back to VB
>                   buff[i] = 0;
>                }
>                SafeArrayUnaccessData (Buffer.parray);
>                return;
>             }
>          }
>       }
>       AfxMessageBox ("Invalid parameter passed in VBtoVC method.\n The array
> may only have a single dimension.\n The array must contain 512 bytes.");
>    }
> 
> 
> Luciano Lucas de Oliveira Junior
> Analista de Sistemas - Detran / Montreal Informática
> Desenvolvimento - (21) 3399-1645 Ramal 35
> Celular : (21) 9526-3979

SafeArrayGetLBound(), SafeArrayGetUBound(), SafeArrayAccessData(), and 
SafeArrayUnaccessData() all return error messages on failure.  You 
should be checking for S_OK in your code.

-- 
Thomas Hruska
CubicleSoft President
Ph: 517-803-4197

*NEW* VerifyMyPC 2.4
Change tracking and management tool.
Reduce tech. support times from 2 hours to 5 minutes.

http://www.CubicleSoft.com/VerifyMyPC/

Reply via email to