how to call std_stdio_static_this from a dynamically loaded shared library (osx)
timotheecour
thelastmammoth at gmail.com
Tue Oct 2 17:55:39 PDT 2012
How do I call std_stdio_static_this() in std.stdio from a
dynamically loaded shared library (osx) ?
I need to do this in my scenario:
1) main program is launched
2) dynamic library is created
3) dynamic library is loaded and a function from it is called
4) everything works fine until a writeln(0) is called from a
function inside the dynamic lib, at which point it crashes. But
by calling std_stdio_static_this2 (see below) BEFORE any call to
writeln (and similar functions), everything works fine.
When I call std_stdio_static_this from another module, I'm pretty
sure that code doesn't get called, because when I add a printf or
assert(0) statement inside std_stdio_static_this, nothing happens.
My current (working!) workaround is shown below, but I was hoping
for a solution that didn't involve modifying std.stdio.
----
void std_stdio_static_this2(T=void)()
{
//copy contents of std_stdio_static_this() function here:
//putting assert(0); here WILL crash, as expected; but it
won't if the signature is std_stdio_static_this2().
//Bind stdin, stdout, stderr
__gshared File.Impl stdinImpl;
stdinImpl.handle = core.stdc.stdio.stdin;
.stdin.p = &stdinImpl;
// stdout
__gshared File.Impl stdoutImpl;
stdoutImpl.handle = core.stdc.stdio.stdout;
.stdout.p = &stdoutImpl;
// stderr
__gshared File.Impl stderrImpl;
stderrImpl.handle = core.stdc.stdio.stderr;
.stderr.p = &stderrImpl;
}
----
More information about the Digitalmars-d-learn
mailing list