digitalmars.D.learn - Questions on accessing D objects from C
- Traveler Hauptman (32/32) Sep 20 2005 I like the way my code looks written in D but I need to keep my C safety...
I like the way my code looks written in D but I need to keep my C safety net.
So
it is important for me to be able to use *all* my code written in D.
I have only very basic literacy in C++. So I have some questions that might be
obvious to someone from a C++/OOP background.
What is the point of object.vtbl[]? It's per type info so you know everything
about member functions at compile time and function names appear to show up in
the object file mangled in a way that makes sense for virtual functions. Is
there something dynamic happening to vtbl[]? I can imagine use in getting a
pointer to an unknown object and then searching it's vtbl[] for a destructor...
but there doesn't seem to be enough info available to do that.
Will the present behavior of extern(C) on classes be part of the specification
of D?
extern(C){
class Foo{
int func1();
int func1(int i);
}
}
Right now this appears to put Dmangled function names with C calling
conventions
with a pointer to the object to operate on as the first parameter.
To work with my object from C:
extern int _D6FooMod3Foo5func1UZk(void*);
extern int _D6FooMod3Foo5func1UkZk(void*,int);
{
void* foo;
int i;
foo = get_allocated_object_pointer();
i = _D6FooMod3Foo5func1UZk(foo);
}
With a few #defines to clean up the mangled function names I have a sane
interface into D objects. Can I depend on this behavior?
Thanks,
Traveler Hauptman
Sep 20 2005








Traveler Hauptman <th barrett.com>