If the type conversion isnt clear, you run into trouble of getting strange bugs. It better to enforce the explicit type conversion like this:
[(const char*) MakeString(Index)]
It could be that the automatic cast from the string is the original problem. I dont like such concatenated expressions, because it make debugging harder.
String s= MakeString(Index);
[(const cahr*) s]