oapiReadItem_string(scn,"System",Sol);
This doesn't work, as oapiReadItemX looks for the format param = value, while here the format is param value without the =. Therefore, you'll just end up at the end of the file.
What you can do is oapiReadItemString(scn, "BEGIN_ENVIRONMENT"). Interestingly enough there's a bug in orbiter that will leave the stream at the according line if the item searched for consist of only one term without any space in it.
You can then proceed to read the rest of the file using oapiReadScenario_nextiline().
What you have to consider, though, is that if you do that during clbkLoadState, you have to then continue reading through the scenario file until you're at the same line again where you hijacked it, otherwise there will be hell to pay. The scenarios are meant to be read consequitively line by line, not browsed through like config files!
It should work, but it's not a vessel, it's a Celbody dll and afaik there isn't an equivalent function.
Wait... if it's a cellbody, how do you not know which system it is in by default? Don't you usually code a cellbody for a specific system?