c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programming に分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡)

音樂は SoundCloud に公開中です。

考察は現在は主に Scrapbox で公表中です。

Programming は GitHub で開發中です。

D言語からC言語のコードを呼び出す #dlang

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 ]