You have several problems. extern(C++) only specifies the calling convention, not the visibility of the symbol. To export the symbol, list it in a .def file or mark the function with export in the module itself, ala:
export extern(C++) void SetInt(int * foo) {} I don't know why, but if you use a .def file instead of `export` the function will be exported as a C function with no name mangling. Anyway, use a .def file like the one below and pass it to DMD while compiling the DLL, and it should be exported with that name (and change the string "mydll.dll" of course): LIBRARY "mydll.dll" DESCRIPTION 'My DLL written in D' EXETYPE NT SUBSYSTEM WINDOWS CODE PRELOAD DISCARDABLE DATA WRITE EXPORTS SetInt ATA.lib is probably the autogenerated import library which is useful for implicit linking.