why do i need an extern(C): here?

WhatMeWorry kheaser at gmail.com
Thu Oct 15 21:29:59 UTC 2020

I've go a small DLL and a test module both written in D. Why do I 
need to use the extern(C)?  Shouldn't both sides be using D name 

-------------------- mydll.d --------------------------------
module mydll;

extern(C):   // removing or changing to (D): results in error

     int addSeven(int a, int b) { return a+b+7; }

-------------------- user.d --------------------------------
module user;

import core.sys.windows.winbase;
import std.stdio;

void main()
     alias addSevenFuncSignature = int function(int, int);

     addSevenFuncSignature  addSeven;

     import core.runtime;
     auto mydll = Runtime.loadLibrary("mydll.dll");


     addSeven = cast(addSevenFuncSignature)  GetProcAddress(mydll, 

     int ret = addSeven(2,3);

     writeln("calling addSeven(2,3) = ", addSeven(2,3));


------------------- execution results 

c:\D\dmd2\samples\d\mydll>dmd -m64 mydll.d -L/DLL -L/NOENTRY
    Creating library mydll.lib and object mydll.exp

c:\D\dmd2\samples\d\mydll>dmd -m64 user.d

calling addSeven(2,3) = 12

More information about the Digitalmars-d-learn mailing list