interfacing c++

Markus contact at markus-lanner.com
Tue Nov 21 23:12:33 UTC 2017


hi, im trying to interface a cpp class. I'd like to interface a 
bigger library and I'm trying to figure out the minimum effort.

--- c++ part:
#include <iostream>
class some_class {
public:
   static some_class* __ctor();
   some_class();
   ~some_class();
   void some_method();
};
some_class* some_class::__ctor() {
   auto thiz = new some_class();
   std::cout << "hello from __ctor, thiz:" << thiz << std::endl;
   return thiz;
}
some_class::some_class() { std::cout << "some_class constructor, 
this:" << this << std::endl; }
some_class::~some_class() { std::cout << "some_class destructor, 
this:" << this << std::endl; }
void some_class::some_method() {
   std::cout << "some_class some_method, this:" << this << 
std::endl;
}

--- d part:
extern (C++) {
   class some_class {
     final this();
     final ~this();
     final void some_method();
   }
}
void main() {
   some_class someClass = new some_class(); // works, __ctor() 
gets called, and it calls the constructor.
   someClass.some_method; // works
   destroy(someClass); // crashes (SIGSEGV) inside lifetime.d 
rt_finalize2()
}

---
OS: ubuntu 17.10
compiler: DMD64 D Compiler v2.077.0

I could do the instancing/destruction by functions and write a 
custom d class that calls these methods in this()/~this(). But I 
was hoping not needing to write a class in D AND in cpp. and i 
was hoping to save another step/level of instancing.

Any idea how to make the destructor of cpp compatible with 
"~this()"?

Thx in advance
Markus



More information about the Digitalmars-d-learn mailing list