Why not simply add extern (C) wrappers for your D code? I see no point of using C, unless you want to be portable to arcane architectures. With this approach you'll have both the portability of C and the advantages of using D.
Yes I admit this idea hadn't occurred to me earlier.
