4.3 DLL 使用の実際

Windows 版の Python は Microsoft Visual C++でビルドされています; 他のコンパイラを使うと、うまく動作したり、しなかったりします (Borland も一見うまく動作しません)。この節の残りの部分は MSVC++ 向けの説明です。

Windows で DLL を作成する際は、pythonXY.lib をリンカに 渡さねばなりません。 例えば二つの DLL 、spam と ni (spam の中には C 関数が入っているとします) をビルドするには、以下のコマンドを 実行します:

cl /LD /I/python/include spam.c ../libs/pythonXY.lib
cl /LD /I/python/include ni.c spam.lib ../libs/pythonXY.lib

最初のコマンドで、三つのファイル: spam.objspam.dll および spam.lib ができます。 Spam.dll には (PyArg_ParseTuple() のような) Python 関数は全く入って いませんが、pythonXY.lib のおかげで Python コードを 見つけることはできます。

二つ目のコマンドでは、ni.dll (および .obj.lib) ができ、このライブラリは spam と Python 実行形式中の 必要な関数をどうやって見つければよいか知っています。

全ての識別子がルックアップテーブル上に公開されるわけではありません。 他のモジュール (Python 自体を含みます) から、自作の識別子が 見えるようにするには、 "void _declspec(dllexport) initspam(void)" や "PyObject _declspec(dllexport) *NiGetSpamData(void)"のように、"_declspec(dllexport)" で宣言せねばなりません。

Developer Studio は必要もなく大量のインポートライブラリを DLL に 突っ込んで、実行形式のサイズを 100K も大きくしてしまいます。 不用なライブラリを追い出したければ、「プロジェクトのプロパティ」 ダイアログを選び、「リンカ」タブに移動して、 インポートライブラリの無視 を指定します。その後、 適切なmsvcrtxx.lib をライブラリのリストに追加してください。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。