All pastes #184143 Raw Edit

Untitled

public text v1 · immutable
#184143 ·published 2006-09-27 16:09 UTC
rendered paste body
[gregor@gdeskgor test]$ cat so.d
import std.stdio;
import std.gc;

class Foo {
    this() { a = 3; }
    int a;
}

extern(C) Foo mkfoo()
{
    return new Foo();
}

extern(C) void foocollect()
{
    std.gc.fullCollect();
}

extern(C) void usefoo(Foo a)
{
    writefln("%d", a.a);
}

[gregor@gdeskgor test]$ cat getso.d
import std.stdio;
import std.string;
import std.gc;

extern (C) void *dlopen(char *, int);
extern (C) char *dlerror();
extern (C) void *dlsym(void *, char *);
extern (C) void perror(char *);

int main()
{
    void *hnd = dlopen("so.d.so", 2);
    Object function() mkfoo =
        cast(Object function()) dlsym(hnd, "mkfoo");
    void function() foocollect =
        cast(void function()) dlsym(hnd, "foocollect");
    void function(Object) usefoo =
        cast(void function(Object)) dlsym(hnd, "usefoo");

    Object foo = mkfoo();
    std.gc.fullCollect();
    foocollect();
    usefoo(foo);
    return 0;
}

[gregor@gdeskgor test]$ gdc -fPIC -shared -nostdlib so.d -o so.d.so
[gregor@gdeskgor test]$ gdc -rdynamic -ldl getso.d -o getso
[gregor@gdeskgor test]$ LD_LIBRARY_PATH=. ./getso
3