Hello. When I'm trying to create a class object by using a dlsym-ed function, I'm getting a segmentation fault after execution of program.

However, if I'm deleting that object before 'return 0' in main (by using 'delete b'), everything is going fine.

I'm just started to learn D after using C++ for more than 5 years, so some things look really strange for me (especially that 'new className()' doesn't return a pointer).

What am I doing wrong here? Is there any way to do what I'm trying to do right way?

Thanks.

test.d:

import std.c.linux.linux;
import std.stdio;
import testclass;

int main(string[] args)
{
void* handle = dlopen("./testclass.so", RTLD_LAZY | RTLD_LOCAL);
    testclass function(wstring) a;
a = cast(testclass function(wstring))dlsym(handle, "loadClass");
    testclass b = a("test");
    return 0;
}

testclass.di:

class testclass
{
    this(const wstring loadmsg);
    ~this();
    wstring foo();
};

testclass.d:

import std.stdio;

class testclass
{
    private wstring msg;
    this(const wstring loadmsg)
    {
        writeln("Class constructor");
        this.msg = loadmsg;
    }
    ~this()
    {
    }
    wstring foo()
    {
        return msg;
    }
};

extern(C) testclass loadClass(const wstring loadmsg)
{
    return new testclass(loadmsg);
}

Reply via email to