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で設定していたブレークポイントで、プログラムが止まれば成功です。