http://d.hatena.ne.jp/Ozy/
Ozyさんが昨日の所のフォローを書いてくれてます。
状況を整理して書いてみると、implib使えば.dllから.libができるので、それリンクして一応動いたので、できたーと思ってた問題。stdcallで呼び出すようにして解決。


もう一つのは、なんか紛らわしい書き方で誤解させてしまったようですが、dmdではコンパイル時にfunc(int[3])が_func@12で呼び出されるって所で、この@の数字が実際にスタックにつまれる引数のサイズだと思い込んでたこと。ほんとに@12で積まれてたら.libを@12に書き直してもdllと整合性とれなー。と思ったので。
で、exeを調べてちゃんとポインタ@4で渡されてるのを確認。というか今から思うと、参照渡しなのにスタックに配列そのまま積んでどうするんだ、って感じですが。


dllからlib作った手順は

  • impdefで.defを作る
  • スタック数を書き足す。
  • implibで.defから.libを作成

こんな感じ。