SDL_putenv("SDL_WINDOWID=") on Visual Studio 2003.net

I have been trying to get SDL to draw into a qt widget with moderate
success. After pouring over the mailing lists, I found the SDL_WINDOWID
envar for setting the Wid:

   char variable[256];
   sprintf(variable, "SDL_WINDOWID=0x%lx", winId());
   if (::putenv(variable) == -1)
   {
     // ....
   }

However (as many people have pointed out) this does not seem to work as
a new window pops up with directx. Further digging revealed the problem.
Since sdl is compiled into a separate dll, it uses a separate
environmental block than the application and hence the putenv is not
accessible within the dll.

I then tried:

#define NEED_SDL_GETENV
#include <SDL_getenv.h>
//…

   char variable[256];
   sprintf(variable, "SDL_WINDOWID=0x%lx", winId());
   if (SDL_putenv(variable) == -1)
   {
     // ....
   }

However, this leads to many unstable seg faults. Finally, I hacked
SDL_getenv.c so that for visual studio, SDL_putenv and SDL_getenv call
::putenv and ::getenv. This seems to work as they mod the environment
block of the sdl dll.

Is this the best fix? I am new (about 2 days) to SDL so I feel like I am
missing something obvious. I can post the mods to the SDL_getenv.{h,c}
if it would help.

Cheers,

Mark–
±±=-+=-±=-±=-±=-±=-±=-±=-±=-±=-+
Mark R. Stevens, Ph.D. mstevens at cra.com
Principal Scientist 1-617-491-3474x570
Charles River Analytics http://www.cra.com

I then tried:

#define NEED_SDL_GETENV
#include <SDL_getenv.h>
//…

   char variable[256];
   sprintf(variable, "SDL_WINDOWID=0x%lx", winId());
   if (SDL_putenv(variable) == -1)
   {
     // ....
   }

However, this leads to many unstable seg faults.

Did you find any bugs in the code itself? It’s possible you’re just
using different C runtimes (and associated memory managers)

Finally, I hacked
SDL_getenv.c so that for visual studio, SDL_putenv and SDL_getenv call
::putenv and ::getenv. This seems to work as they mod the environment
block of the sdl dll.

Is this the best fix? I am new (about 2 days) to SDL so I feel like I am
missing something obvious. I can post the mods to the SDL_getenv.{h,c}
if it would help.

Sure, go ahead and post them, it can’t hurt.

Thanks!
-Sam Lantinga, Software Engineer, Blizzard Entertainment