Python .dll を Borland C++ Builder で静的リンクする方法

概要

Pythonxx.dll (※ xx はバージョン)は Microsoft Visual C++ (以下VC)で作成されています。 VCで作成されたDLLはBorland C++ Builder (以下BCB)とは呼び出し規約が異なるため、 このままでは静的リンクができません。

よってこの違いを吸収するため、モジュール定義ファイルを自ら作成する必要があります。

手順

1. impdef を使い .DEF ファイル(モジュール定義ファイル)を生成する。


  impdef python.def python.dll
  

python.def の内容:

  LIBRARY     PYTHON.DLL

  EXPORTS
    PyArg_Parse                    @1   
    PyArg_ParseTuple               @2   
    PyArg_ParseTupleAndKeywords    @3   
    PyArg_VaParse                  @4   
    ....続く
  

2. .DEF ファイルに記載されている関数名から、序数を取り下線を付加する。

  LIBRARY     PYTHON.DLL

  EXPORTS
    _PyArg_Parse=PyArg_Parse
    _PyArg_ParseTuple=PyArg_ParseTuple
    _PyArg_ParseTupleAndKeywords=PyArg_ParseTupleAndKeywords
    _PyArg_VaParse=PyArg_VaParse
    ....続く
  

3. implib を使い、.DEF ファイルからインポートライブラリを生成する。

  implib python_bcb.lib python.def
  

4. プロジェクトに 3. のインポートライブラリを追加する。

参考