How do I make an extern function?

BCS none at anon.com
Mon Jun 28 18:54:31 PDT 2010


Hello Simen,

> ////////////////////
> module a;
> extern void foo( );
> 
> void bar( ) {
> foo( );
> }
> ////////////////////
> module b;
> import std.stdio;
> 
> void foo( ) {
> writeln( "Hi!" );
> }
> ////////////////////
> 
> The above does not work (Error 42: Symbol Undefined _D1a3fooFZv).
> Adding extern to foo in module b changes nothing. extern( C ) works,
> but seems like a hack. Better ideas?
> 

The issue is that the function called from module a is
_D1a3fooFZv where the function defined in module b is
_D1b3fooFZv ('a' <-> 'b') so they aren't the same function. extern(C) works 
because C doesn't mangle names so the function is foo in both cases. You 
can resolve this by having a a.di file with the extern foo(); in it (DMD 
has a flag to generate such a file for you). OTOH without knowing what you 
are doing, I can't tell if this is the correct solution.

-- 
... <IXOYE><





More information about the Digitalmars-d-learn mailing list