pragma mangle hacking

evilrat evilrat666 at gmail.com
Mon Feb 17 03:34:32 PST 2014


hello guys,

is this is possible to write full name mangle? and what compilers 
support this pragma except DMD?

i mean look at this (hacky) stuff
--------------

C++ side:
namespace somenamespace
{
  EXPORT int func() { return 42; }
}

D side:
// this is already works with MS C++
pragma(mangle, "func at somenamespace")
extern(C++) int func();
--------------

and now i'm(not first of course) trying to do something like this:
--------------
// this is not currently working for me due to mangling pattern 
mismatches between DMD and VC++2013?
extern(C++)
{
  class CppClass
  {
   pragma(mangle, "?0")
   static void cppctor();
  }
}

so next in code it may be possible to do
1) malloc enough space
2) move pointer to edx/eax? ... i always forgot this calling 
conventions :(
3) call cppctor
...
PROFIT!!11 (or actually not, who knows what else may happen here)
--------------

i'll need this at least for windows, no intention for 
portability. the whole problem is just because many "professional 
oriented" stuff has C++ API only, hacking ABI directly is not 
worth it and currently there is not so much binding generators 
available which able to produce reliable bindings.

so with just little tuning here this pragma could provide access 
for more C++ stuff including much anticipated Qt bindings and 
other libs...

p.s. stuff i'm looking at is such examples as proprietary FBX 
SDK, or 'open source' Allembic SDK and others. they both has 
bloat API so doing wrapping even for a subset of it would take 
just a lot of time(and produce more bugs).


More information about the Digitalmars-d-learn mailing list