You can't just cast a OBJECT[] to a STRING[], those are not compatible. Instead, you need to write code that enumerates the OBJECT[] returned by _ArrayToObjectArray() and put each item to the STRING[]. If this still doesn't work, please post a complete code snippet so we can have a look.
About your other function, the correct way to instantiate a STRING[] is this:
FUNCTION XSStringArray2CSStringArray(input as ARRAY) AS System.String[]
LOCAL output as System.String[]
local i as int
output:=System.String[]{ALen(input)}
for i:=1 to ALen(input)
output[i]:=(System.String)input[i]
next
RETURN output
I have to admit I would not have guessed that the syntax for instantiating an array of string objects is being instantiated that way
but maybe I didn't dig deep enough in the help docs.