On Tuesday, 24 July 2018 at 15:48:28 UTC, Vladimir Marchevsky
wrote:
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?
Seems like it's virtual destructor could that be?
this qt5 binding:
https://github.com/MGWL/QtE5/blob/master/source/qte5.d
seems to always define the constructor.