Visual StudioでWindowsのDLLの作成方法をC言語/C++で作成したソースコードの実例付きで詳しく解説します。
DLLとはDynamic Linking Library(ダイナミック・リンキング・ライブラリ)の略で、Windowsのアプリケーションが使う部品のような役割のものです。
この記事の内容を動画で紹介しています。
ブログではVisual Studioの操作が分からない方は動画を御覧ください。
プロジェクトの構成
C++で作成したプログラムで説明します。
デバッグ方法の説明のためにDLLのプロジェクトと呼び出し元のアプリを作成します。
ソリューションファイルとプロジェクト
今回、使用するプロジェクト名
a)DLLプロジェクト:「DLL1」
b)呼び出し元プロジェクト:「DLLTest」
以下は完成形のソリューションとプロジェクトです。
DLLのソースコード
DLLからエクスポートする関数は、xxxxx.hという名前のヘッダーファイルに宣言し、__declspec(dllexport)修飾子を付けます。
extern “C” __declspec(dllexport) 戻り値の型 関数名(引数);
外部に公開するために必要な宣言です。
__declspec(dllexport) を使用すると、データ、関数、クラス、クラスのメンバー関数を DLL からエクスポートできます。
使う側(呼び出す側)は、以下のdllimportが必要です。
extern “C” __declspec(dllimport) 戻り値の型 関数名(引数);
今回、作成したファイルは、MathLibrary.cppとMathLibrary.h です。
呼び出し元のソースコード
DLL内の関数を使うので、MathLibrary.h をインクルード(#include)して
DLLの関数「DLL_Add()」を呼び出します。
DLLプロジェクトの作成
プラットフォーム「Windows」を選択し、「ダイナミック リンク ライブラリ(DLL)」を選択し、「次へ(N)」ボタンを押します。
もしくは、「DLL」を検索ボックスに入力すると絞り込み可能です。
プロジェクト名は「Dll1」にします。(なんでもいいです。)
DLLのソースコードを追加します。「ソースファイル」-「追加(D)」-「新しい項目(W)」にソースファイル名を入力します。
ファイルが作成されます。
ここにプログラムを書いていきます。
ヘッダーファイル(MathLibrary.h)も同じように作成します。「ヘッダーファイル」-「追加(D)」-「新しい項目(W)」をソースファイル名を入力します。
MathLibrary.h と MathLibrary.cppを追加すると以下のファイル構成となります。
ビルドしてエラーがないことを確認します。呼び出し元プロジェクトの作成方法
DLLの呼び出し元のプロジェクトを作成し、DLLのプロジェクトを追加してDLLが使えるようにします。
呼び出し元プロジェクトの作成方法
(1)呼び出し元プログラムのプロジェクトを作成します。
(2)先程作成したDLLのプロジェクトを追加します。
「ソリューション」を選択し、右クリックでメニューを表し「追加(D)」-「既存のプロジェクト(N)」をクリック。
■別方法(参考)
ソリューションに新規にDLLのプロジェクトを追加して、DLLを作成する方法もあります。
「ソリューション」を選択し、右クリックでメニューを表し「追加(D)」-「新しいプロジェクト(N)」をクリック。
呼び出し元のソースコードを追加
DLL内の関数を使うので、MathLibrary.h をインクルード(#include)して、DLLの関数「DLL_Add()」を呼び出します。
コンパイルエラーの対応
ビルドすると、MathLibrary.h が見つからないエラーになります。
以下の対応が必要です。インクルードファイル(MathLibrary.h)の場所を設定する必要があります。
MathLibrary.hが存在するディレクトリを「追加のインクルードディレクトリ」に追加します。
DLLを使う側のプロジェクト「DLLtest」の「プロパティ」-「C/C++」-「全般」「追加のインクルードディレクトリ」で指定。
リンクエラーの対応
「DDL_Add」関数が未解決の外部シンボルエラーになります。
以下の対応が必要です。インポートライブラリファイル(DLL1.lib)の場所を設定する必要があります。
「リンカー」の「追加の依存ファイル」にDLLのライブラリ「DLL1.lib」を指定します。
DLLを使う側のプロジェクト「DLLtest」の「プロパティ」-「リンカー」-「入力」「追加の依存ファイル」で指定。
今回のサンプルプログラム
説明に使用したVisual Studio 2022のソリューションファイル一式をダウンロード可能にしておきます。学習用にご利用ください。
(大したプログラムではないです。著作権はありません。(^^♪) )
ヘッダーファイルとライブラリファイルの指定がフルパスになっているので、適当に変更してください。
【DLL-build.zip】ファイルサイズ(10KB)
C:\src\Dll-build に解凍し、DLLtest.slnをVisual Studioで開くとそのまま利用可能です。
最後に(Windows VPSを紹介)
公式サイトの情報は、文字ばかりで理解することが難しいですね。今回、画面のスクショを多くして解説しました。
最後にWindowsの開発者が知っているとお得なことを紹介します。
クラウド上のWindows Serverがリーズナブルな価格で即日利用可能なVPSサービスが存在します。動作検証などで1ヶ月だけの利用などの用途にも使えます。
物理サーバマシンを手配したことがある方は分かりますが。
物理サーバを用意する場合は、メーカーにサーバマシンの見積りを取って、手配をして搬入して設置し、Windowsをインストールしてネットワークなどを設定してやっと使えるようになります。(どんなに早くても週単位で時間がかかります)
「ConoHa」と「さくらVPS」では、契約アカウントの作成からWindows Serverが使えるまで、30分かかりません。
(他の会社のVPSは、次の営業日だったりと開始まで時間がかかります。)
ConoHa の VPSは時間課金をサポートしているので、2、3日だけ使うという用途でも利用可能です。(4時間だけという使い方もできます)
私は記事を書くための調査や動作確認にConoHaのVPSを使っています。ローカルのPCにいろいろソフトをインストールするとWindowsが不調になるので。
Kindle出版しました
Visual Studio デバッグ関連のブログ記事を再編集してアマゾンのKindle本で提供しています。
Kindle Unlimited会員は無料(0円)で読むことができます。
Visual Studioの役に立つ情報も追加しているので、気になる方は以下の記事もご覧ください。
Kindle出版で技術本を出版するノウハウも記載しています。