g <b><tt>gsdll_init()</tt></b> the address of
<b><tt>gsdll_callback()</tt></b>, it should instead be given the address of
a thunk created by <b><tt>MakeProcInstance</tt></b>.  This thunk changes
the data segment back to that used by the caller:

<blockquote>
<pre>FARPROC lpfnCallback;
lpfnCallback = (FARPROC)MakeProcInstance((FARPROC)gsdll_callback, hInstance);
code = (*pgsdll_init)((GSDLL_CALLBACK)lpfnCallback, NULL, argc, argv);
if (!code) {
    fprintf(stderr, "GSDLL16 is already in use\n");
    return -