After reading 2.081 patchnotes about improvements with binding to cpp classes, I'm trying to test it - with simple examples and Qt as cpp library.

My naive approach is to bind just a couple of used methods of specific classes (omitting others) and try to use it directly in D just with linking of default Qt5Core.lib. Sometimes it works just fine:

---app.d
import std.conv;
import std.stdio;

extern(C++) {
    class QVariant {
        this();
        this(int);
        this(double);
        final ~this();

        final int toInt(bool *ok = null) const;
        final double toDouble(bool *ok = null) const;
    }
}

void main()
{
    QVariant a = new QVariant(5);
    QVariant b = new QVariant(5.5);
    writeln("a: " ~ a.toInt().to!string);
    writeln("b: " ~ b.toDouble().to!string);
    readln();
}
---

This example compiles and works like a charm.

Other classes like QObject or QCoreApplication do not link with error like this:

cpptest.obj : error LNK2001: unresolved external symbol ""public: virtual void * __cdecl QObject::`scalar deleting destructor'(unsigned int)" (??_GQObject@@UEAAPEAXI@Z)"

There is no such symbol in Qt5Core.lib, obviously. Is it my mistake somewhere? Why do some classes require this destructor when it doesnt actually exist in lib? And why do other classes work without it?

Reply via email to