C++ Builder 2009で、DLLのデバッグにPythonを利用する

C++ Builderで、DLLのデバッグにPythonを利用する がすばらしかったので、
C++Builder 2009で同様のことができるか検証しました。

結論から言うと、C++Builder 2009でもPythonを使用することで簡単にDLLのデバッグができました。

以下は作業手順です。

メインメニューから「ファイル」-「新規作成」-「その他」を選択します。

「C++Builderプロジェクト」から「ダイナミックライブラリ」を選択します。

「ソースの種類」は「C」を選択、「マルチスレッド」「VC++スタイルのDLL」はチェックを外します。

「OK」ボタンを押し、プロジェクトを作成します。

プロジェクトを保存、再構築します。

メインメニューから「実行」-「実行時引数」を選択します。

「ホストアプリケーション」にpython.exeを指定します。

C:\Python26\python.exe

ソースコードにブレークポイントを設定します。

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
  return 1; //<= この行にブレークポイントを設定する
}

プロジェクトを実行します。
Pythonインタラクティブシェルが起動します。

次のコードを入力します。

>>> import ctypes
>>> dll = ctypes.windll.LoadLibrary("Project1.dll")

C++Builderで設定していたブレークポイントで、プログラムが止まれば成功です。

プログラムを再開します。

Pythonインタラクティブシェルを終了します。

>>> quit()

次のコードを追加し、ブレークポイントを設定します。

__declspec(dllexport) int WINAPI Add(int x, int y)
{
  return x + y; //<= この行にブレークポイントを設定する
}

再び、プロジェクトを実行します。

次のコードを入力します。

>>> import ctypes
>>> dll = ctypes.windll.LoadLibrary("Project1.dll")
>>> print dll.Add(1, 2)

C++Builderで設定していたブレークポイントで、プログラムが止まれば成功です。

毎回、Pythonインタラクティブシェルで同じコードを入力するのは大変ですので、スクリプトファイルから実行することにします。

プロジェクトのDebugディレクトリにtest.pyを作成し、次のコードを記述します。

#!C:\Python26\python
# -*- coding: cp932 -*-
from ctypes import windll
dll = windll.LoadLibrary("Project1.dll")
print dll.Add(1, 2)
raw_input('') #Enterキーを入力するまで待機する

メインメニューから「実行」-「実行時引数」を選択します。

「パラメータ」に作成したtest.pyのパスを指定します。
パスにスペースが入る場合は、「”」でくくる必要があります。

"C:\Documents and Settings\yamamoto\My Documents\test\Debug\test.py"

プロジェクトを実行すると、test.pyが実行されます。

C++Builderで設定していたブレークポイントで、プログラムが止まれば成功です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください