Visual Studioなどで作成したWin32 DLL Dynamic Link LibraryをPythonで利用する方法を紹介します。
ctypesのインストール
外部モジュールを取り扱うためのライブラリとしてctypesが必要になります。Python 3がインストールされている場合、既定値でctypesはインストールされているので問題ないですが、pipコマンドを使ってctypesをインストールすることができます。
VC++でDLLを作成
Visual Studioを使ってWindows DLLをC++で作成していきます。具体的には次のようにします。
1.[新しいプロジェクト]を表示して[C++]テンプレートから[ダイナミック リンク ライブラリ(DLL)]を選択して[次へ]をクリックします。
2. プロジェクト名を入力して[作成]をクリックします。
2. 作成された[dllmain.cpp]ファイルに呼び出すための関数を追加します。
今回は引数を有無で次のような2種類の関数を追加しました。
extern "C" __declspec(dllexport) void __cdecl show_message(void)
{
MessageBox(NULL, TEXT("DLLが表示しています"), TEXT("show_message"), MB_OK);
}
extern "C" __declspec(dllexport) int __cdecl increment_value(int n)
{
n++;
return n;
}
3.[ソリューション構成]を[x64|Debug(またはRelease)]に変更してビルドを行います。
4. 拡張子(.dll)が出力されます。
Visual Studio Codeから呼び出し
Pythonのデバッグ環境を用意したVisual Studio Codeから作成したDLLを呼び出すには次のように行います。
1. 適当なフォルダーにPython用のファイルを作成して、次のようにコードを記述します。
import ctypes
dllsample = ctypes.WinDLL("dll-sample.dll")
dllsample.show_message()
print(dllsample.increment_value(1))
2. 作成したDLLファイルを同じフォルダーにコピーします。
3.[実行|デバッグの開始]メニューを選択します。([Select a debug configuration]が表示された場合には一覧から[Python File]を選択します)
4. コードが実行され表示されたメッセージボックスで[OK]をクリックします。
4.[ターミナル]に “2” が出力されコードが終了します。
まとめ
Pythonのctypesライブラリを利用することでVC++で作成したダイナミックライブラリ(DLL)をインポートして実行することができました。
Windowsのネイティブな機能を利用する場合は、PythonよりもWin32 DLLの方が高速で高度な操作をすることができるので、DLLを利用できることは便利です。
スポンサーリンク
最後までご覧いただき、ありがとうございます。