// It seems it doesn't work if I use vArgArray[0].bstrVal = Range...
A BSTR is a bit more than a pointer to a character array. Specifically, the length of the string is cached in a four byte block right before the starting address of the characters. So as such its no longer a primitive data type, but rather a bonafide object, albiet a fairly simple one.