Just to let you know we've found and fixed the issue. Our tests are working fine now in WS2008 R1 SP2. For the curious, it was a bug in the VCL (class TStreamAdapter), which forgets to set the filename. This works in Win7 and most windows, but it doesn't in WS2008 (it does in WS2008 R2 though). We've derived our own TStreamAdapter from the original VCL class, and set the filename, and now it is working fine.
Just an idea: If the GDI+ headers in BCB6 are wrong, it might be simpler to add the support to the dll itself.
What you really need to do is to call the initialization code from the main app, not from the dll, and this is why FlexCel can't do it automatically. But the initialization code can be in the dll, you just need to call it from the main app.
What I am saying is that you can have 2 methods in the dll:
InitGDIPlus() and ShutdownGDPlus(), which you can compile without problems (because the dll itself is in XE or newer, so it can call GDI+ directly). Then you call those methods from your BCB6 app, but you don't need to call directly the GdiPlusStartup/Shutdown methods in GDI+, so you don't need to import the headers.
Actually I got thinking that we will be adding some 2 new methods to FlexCel itself: InitFlexCel and ShutdownFlexCel. Internally, those methods would just init/shutdown GDI+. but you won't need to include GDI+ headers to call them. Then you could export those methods in the dll, and it would be possible to init the engine from anywhere without worring about GDI+ headers.