Note
Mapping and handling of data type binary (IDL file format B) changed
in version 5.2.1.6 of the DCOM Wrapper. To avoid conversions of any
binary data, the mapping of data type binary was changed from automation type
BSTR to automation type unsigned char.
This document covers the following topics:
| Software AG IDL | Visual Basic | C++ | Note | |
|---|---|---|---|---|
| B1 | Byte | unsigned char | ||
| B n | 1 GB >= n > 1 | Byte() | SAFEARRAY(unsigned char) | 1 |
| B n /i1,i2,i3 | 1 GB >= n >= 1 | Byte() | SAFEARRAY(unsigned char) | 1, 2 |
| BV1 | Byte | unsigned char | ||
| BV n | 1 GB >= n > 1 | Byte() | SAFEARRAY(unsigned char) | 1 |
| BV n /i1,i2,i3 | 1 GB >= n >= 1 | Byte() | SAFEARRAY(unsigned char) | 1,2 |
| BV | Variable size <=1 GB | Byte() | SAFEARRAY(unsigned char) | 1 |
| BV/i1,i2,i3 | Variable size <=1 GB | Byte() | SAFEARRAY(unsigned char) | 1 |
The maximum length you can specify depends on your hardware configuration and your software environment apart from EntireX. There is, however, an absolute limit (1 GB) that cannot be exceeded.
Depending on n, the SAFEARRAY has 3 dimensions (n = 1) or 4 dimensions ( n > 1).
The n (n > 1) length value is used as the rightmost index, for n = 1 the index n is dropped.
Bn / i1,i2,i3 --> i1,i2,i3,n B1 / i1,i2,i3 --> i1,i2,i3
Note
If the IDL file contains data of type binary, the code generated by
the EntireX DCOM Wrapper 5.2.1.6 is not compatible to the code generated
by older versions of the EntireX DCOM Wrapper. If the IDL file does not
contain data of type binary, the codes are compatible.
Library 'Bintest' Is
Program 'bintest1':'binary1' Is
Define Data Parameter
1 LittleBin (B1)
1 MaxBin (B126)
1 BigBin (B16/20)
1 VeryBigBin (B10/3,4,5)
End-Define
Program 'bintest2':'binary2' Is
Define Data Parameter
1 Group
2 BigBin (B126/20)
1 PerGroup (/2,3)
2 AnotherBin (B30/10)
End-Define
Dim obj As Object
...
Set obj = CreateObject("Eol.BinTest")
...
' Init parameter of program "binary1"
Dim vbLittleBin As Byte
Dim vbMaxBin() As Byte
Dim vbBigBen() As Byte
Dim vbVeryBigBin() As Byte
' Parameter of program "binary2"
' --
' others
Dim checksum As Long
' redim Parameter of program "binary1"
ReDim vbMaxBin(1 To 126)
ReDim vbBigBin(1 To 20, 1 To 16)
ReDim vbVeryBigBin(1 To 3, 1 To 4, 1 To 5, 1 To 10)
'''' binary1 ''''
' Fill in binary data
vbLittleBin = &H0
For i1 = 1 To 126
vbMaxBin(i1) = i1
Next i1
For i1 = 1 To 20
For i2 = 1 To 16
vbBigBin(i1, i2) = 130 + i2 + i1
Next i2
Next i1
For i1 = 1 To 3
For i2 = 1 To 4
For i3 = 1 To 5
For i4 = 1 To 10
vbVeryBigBin(i1, i2, i3, i4) = 130 + i2 + i1
Next i4
Next i3
Next i2
Next i1
obj.binary1 vbLittleBin, vbMaxBin, vbBigBin, vbVeryBigBin
' Reading of binary data
' here for example:
' takes all binary data values and add them to variable checksum
checksum = 0
For i1 = 1 To 3
For i2 = 1 To 4
For i3 = 1 To 5
For i4 = 1 To 10
checksum = checksum + vbVeryBigBin(i1, i2, i3, i4)
Next i4
Next i3
Next i2
Next i1
...
'''' binary2 ''''
Dim barray20_126() As Byte
Dim barray10_30() As Byte
ReDim barray20_126(19, 125)
ReDim barray10_30(9, 29)
For i1 = 0 To 19
For i2 = 0 To 125
' fill in some values
barray20_126(i1, i2) = i1 + i2
Next i2
Next i1
obj.binary2_group.bigbin = barray20_126 '(B126/20)
For i1 = 0 To 1
For i2 = 0 To 2
For i3 = 0 To 9
For i4 = 0 To 29
' fill in some values
barray10_30(i3, i4) = 255 - i1 - i2
Next i4
Next i3
obj.binary2_pergroup(i1, i2).anotherbin = barray10_30 ' (B30/10)
Next i2
Next i1
obj.binary2 obj.binary2_group, obj.binary2_pergroup_all
' Reading of binary data
' here for example:
' takes all binary data values and add them to variable checksum
barray20_126 = obj.binary2_group.bigbin '(B126/20)
checksum = 0
For i1 = 0 To 19
For i2 = 0 To 125
checksum = checksum + barray20_126(i1, i2)
Next i2
Next i1
For i1 = 0 To 1
For i2 = 0 To 2
barray10_30 = obj.binary2_pergroup(i1, i2).anotherbin
For i3 = 0 To 9
For i4 = 0 To 29
checksum = checksum + barray10_30(i3, i4)
Next i4
Next i3
Next i2
Next i1