Dynamic Loading of C DLLs and How to Use Them
    Joshua Cearley 
    joshua at blackcrystal.us
       
    Wed Mar 22 23:18:53 PST 2006
    
    
  
braddr from #d asked me to post this here, so here we go :)
This has probably been posted before, but it's useful to keep in an 
accessible place. When trying to cast a function pointer to an external 
C version of one, it requires this really awkward trick.
Placing the alias outside of a class at the module level inside an 
extern (C) will make an alias of a C function pointer. You can then use 
this alias to convert the function pointers. Here is an example:
-- Boilerplate types --
extern (C)
{
   alias void function() CFunc;
   void function() testVar;
}
alias void function() NotCFunc;
-- Usage example --
// This does NOT work and gripes about unable to convert to C
testVar = cast(NotCFunc)GetSomeCFuncPointer();
// This DOES work
testVar = cast(CFunc)GetSomeCFuncPointer();
-- End of Example --
 From my observations the alias command will capture the external state 
as part of the alias, which means this is the only way to cast to C 
function pointers at this time.
-Joshua Cearley
BlackCrystal Software
    
    
More information about the Digitalmars-d-learn
mailing list