single.php

PythonでVC++のWindows DLLを使う方法

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を利用できることは便利です。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

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