How are you putting your two 16 bit value back together as a 32 bit value?
Not still multiplying by 32767 I hope.
With my firt code (using /32767 etc ) I rebuild the Long with the reverse math method in VisualBasic
Long = ( H * 32767) + L
I know that this is not the right method, this is the reason why I ask to a forum users an alternative, but anyway it works.
If someone can write and example code using bitshift that works I'll study the background of the bit operation to understand it.