Makefileも書いたことが無い人間ですので、手間取りました。dmcでCをobjにして、dmdでDと一緒にリンクするだけです。
DMDは入れてあるとします。
/* playinj.c */ int sum(int l, int r) { return l + r; }
此う云う何の益も無いC言語の関数を、D言語から呼びたいとします。Cをオブジェクトファイルにします。
C:/D/dm/bin/dmc -c playinj.c
-c
オプションを使います。playinj.obj
が出来ました。
D言語の、益体も無いmainプログラムを書きます。
// playworks.d extern (C) { int sum(int left, int right); } import std.stdio; void main(string[] args) { Momonga obakemomonga = new Momonga("Obake"); writef("%s is %d years old.", obakemomonga.name, sum(4, 2)); } class Momonga { private: string _name; public: @property { string name() { return _name; } void name(string name) { _name = name; } } this(string name) { _name = name; } }
extern (C)
で、リンカ用情報を書きます。先程のオブジェクトファイルと合わせて、コンパイルします。
dmd playinj.obj playworks.d -offilename playworks.exe
playworks.exe
が出来たので、ObakeMomongaの年齢を喋らせてください。
cf. ["Patchouli says: Mukyu-" #d_lang http://d.hatena.ne.jp/Kureduki_Maari/20110913/1315879030 ]