Hi Bart,
This is because of the way the OCX works. It comes with a type library that contains all information about the exported objects / properties / methodes that the OCX support. The client application reads this Type Library so it knows how to use the OCX.
Thus LabVIEW uses the type library to populate the property and invoke nodes. this is why you can just wire in the reference and select the property or method you like to use. There are some 'rules' on the Data Types that you can / sould use in this interface to ensure ease of use en compatibility. but some developers don't follow this and this then results in incompatibilities with other client applications like LabVIEW.
DLL are more flexable in this respect because you have more control over how LabVIEW should handle the data. This enables you to use a byte array in LabVIEW to store complex data types from DLLs. In some case (when the data structure is not contious in memory) you will need to write a wrapper dll to 'translate' this data to LabVIEW usable datatypes.
Hope this explains the issue your're seing.
Regards
Karsten