Pd (Pure Data) の Windows 版の開発にはマイクロソフトの Visual C++ が使用されており、 external の開発もそれが前提となっています。 しかし Visual C++ を購入せずボーランドから無料で配布されている Borland C++ 5.5 を使用した方がより少ない負担で extern の開発をすることができるでしょう。 このページでは Pd に付属のサンプルプログラム(\pd\doc\6.externs にある foo1、foo2、dspobj~ の三つのプログラム)を BC++ 5.5 を使ってコンパイルする手順を説明します。 DOS コマンドに関する基本的な知識があればこの手順を追うことは可能です。
Pd についてくる pd.lib はマイクロソフトのコンパイラ向けの形式なのでボーランドのコンパイラでは使えません。 その代わりに implib.exe を使ってボーランド用のインポートライブラリを作成します。 コマンドラインプロンプトで \pd\bin に移動し、 implib -a pd_bc.lib pd.dll と入力します。
C:\pd\bin>implib -a pd_bc.lib pd.dll
これでボーランド用のインポートライブラリ pd_bc.lib が作成されます。 このライブラリは external のリンク時に一緒にリンクします。
次のような内容の三つのファイルを作成し、 それぞれ foo1.def, foo2.def, dspobj~.def という名前で \pd\doc\6.externs に置きます。
# foo1.def
EXPORTS
foo1_setup =_foo1_setup
# foo2.def
EXPORTS
foo2_setup =_foo2_setup
# dspobj~.def
EXPORTS
dspobj_tilde_setup =_dspobj_tilde_setup
\pd\doc\6.externs にある makefile もやはりボーランドのコンパイラでは使えないものなので独自に書いたものを使います。 以下のような内容で makefile.bc という名前のファイルを作ってください
# makefile.bc
ROOT = c:\borland\bcc55
CC = $(ROOT)\bin\bcc32
LINK = $(ROOT)\bin\ilink32
PD = c:\pd
INC = -I$(ROOT)\include;$(PD)\src
LIB = -L$(ROOT)\lib;$(PD)\bin
CFLAGS = -c -tWD
LFLAGS = -Tpd -c -x
all: foo1.dll foo2.dll dspobj~.dll
.c.dll:
$(CC) $(CFLAGS) $(INC) -o$*.obj $*.c
$(LINK) $(LFLAGS) $(LIB)\
c0d32.obj+$*.obj,$*.dll,,import32.lib+cw32.lib+pd_bc.lib,$*.def
clean:
del *.dll
del *.obj
del *.ils
del *.ilf
del *.ilc
del *.ild
del *.tds
このメイクファイルを \pd\doc\6.externs にコピーしてから、 コマンドラインプロンプトで \pd\doc\6.externs に移動し、 make -fmakefile.bc と入力します。
C:\pd\doc\6.externs>make -fmakefile.bc
これで foo1.dll foo2.dll dspobj~.dll が作成されます。 ちなみに「パラメータ 'x' は一度も使用されない」という警告は特に気にする必要はありません。 正しく作成されたかを確認するために Pd で test-foo1.pd を開いてみてください。 次のようなウィンドウが表示されるはずです。
![オブジェクト [foo1] の入力にメッセージ [5] と メッセージ [rats] が繋がっている](pd_bc_foo1.gif)
オブジェクト foo1 が上の二つのメッセージと線で繋がれていなければ foo1.dll が正常に作成されていません。 もう一度よく確認してやり直してください。 オブジェクト foo1 は数値メッセージを受け取ったときにその数値を、"rats" というメッセージを受け取ったときに "rats" という文字列を Pd のコンソールに出力する簡単なオブジェクトです。
http://nul.jp/2002/pd_bc