Writing a D Wrapper for a C Library

Writing a D Wrapper for a C Library

The corresponding D object can be a struct holding the pointer (aka handle), but oftentimes a C function returns a so-called “shared handle”—a pointer to a C struct which we should not free because it is a part of a larger C object and shall be freed by the C library only when that larger C object goes away. To deal with C callbacks (particularly when accepting a argument for additional data) in an object-oriented way, we need a way to convert between C pointers and D class objects (we pass D objects as C “user data” pointers). D structs are enough (and are very efficient) to represent C objects like librdf library objects, but for conveniently working with callbacks, classes are more useful because they provide good callback machinery in the form of virtual functions.

Source: dlang.org