The problem might be unicode-releated. You pass strings as PChars, but since XE2 is unicode, a char now has a size of 2 Bytes (codepage + char) instead of 1 Byte that it had in earlier versions. So try to pass the filenames different, e.g. cast as ansistring or some type where char size is 1, which SDL obviously expects.

Some more explanation : Since a Char in Uncide now has two bytes, for SDL your filename will look like this : "M Y F I" instead of "MyFile" due to codepages being stored with each char.

So you'll e.g. have to do something like this : Graphic := SDL_LoadBMP(PAnsiChar(sFile)), depending how sFile is declared.