March 23, 2006 Dynamic Loading of C DLLs and How to Use Them | ||||
---|---|---|---|---|
| ||||
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 |
Copyright © 1999-2021 by the D Language Foundation