Have you tried to use a byte array vs long/integer for the unsigned?

Writing the unsigned values to the byte array would be a bit of work, but not too difficult.

As a test, dim Vals(3) As Byte, then change Vals(3)=1 and see if your OPC control accepts the byte array. If it does, then you'd only need some code to copy the unsigned to the byte array.