« Python で Win32API プログラミング入門 | メイン | TNkDIB/TNkPrinterがDelphi2009に対応 »

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

トラックバック

このエントリーのトラックバックURL:
http://www.gesource.jp/mt/mt-tb.cgi/939

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2009年03月25日 19:24に投稿されたエントリーのページです。

ひとつ前の投稿は「Python で Win32API プログラミング入門」です。

次の投稿は「TNkDIB/TNkPrinterがDelphi2009に対応」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35