Article ID: 154172
Article Last Modified on 12/2/2003
/* Compile options needed : None
*/
// Automation method in the control BinData.
void CBinDataCtrl::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.");
}
NOTE: Code for Visual Basic 4.0 where BinData is the name of the control:
Private Sub Form_Load()
Dim buf(512) As Byte
For i = 0 To 511
buf(i) = 50
Next i
BinData1.VBtoVCtoVB buf
End Sub
Additional query words: 2.00 2.10 2.20 4.00 4.10 4.20 kbinf array Visual Basic 4.00 binary data byte
Keywords: kbctrl KB154172