お茶漬けびより

学んだことを整理する場所です。主に、C++, Unreal Engine 4 (UE4) を扱います。たまに趣味や雑記も。現在(2017/7/1より)無職です。

Visual Studio で 動的ライブラリ(DLL)を利用する

f:id:pickles-ochazuke:20170705153431j:plain

前回は、作成するところまで行いました。
今回は、実際に使ってみたいと思います。

pickles-ochazuke.hatenablog.com

DLL を使うプロジェクトを作成

とくに変わったところはないです。いつも通り作っちゃってください。自分は、空のプロジェクトで作成しました。プロジェクト名は、Project3です。ついでに main 関数を書くためにソースファイル(main.cpp)を作っておきましょう。

DLL を使うための準備

さて、まずは DLL を使えるようにしないといけません。ざっくり手順を書きますと

  1. ソリューションに DLL のプロジェクトを追加(プロジェクトは、前回作成済み)
  2. 使う側に DLL の参照を追加する
  3. DLL のヘッダファイルがあるディレクトリを追加する

1. ソリューションに DLL のプロジェクトを追加

ソリューションエクスプローラに表示されているソリューションを右クリックして、追加 > 既存のプロジェクト を選択します。

f:id:pickles-ochazuke:20170705164854p:plain

するとエクスプローラが開くので、追加したい DLL のプロジェクトを選びます。ここでは、前回作成したプロジェクト(DLLTest.vcxproj)を選びました。これでソリューションエクスプローラに、先ほど選んだプロジェクトが表示されていると思います。これで追加完了です。

f:id:pickles-ochazuke:20170705165339p:plain

2. 使う側にDLL の参照を追加する

次に、今回作成したプロジェクト(Project3)に参照を追加します。画像で見ていただくと分かりやすいと思いますが、ソリューションエクスプローラに表示されている、Project3 の下に参照があると思います。ここを右クリックして、参照の追加を選びます。 f:id:pickles-ochazuke:20170705165916p:plain

で、前回作成したプロジェクト名が表示されていると思うので、それにチェックを入れます。

f:id:pickles-ochazuke:20170705170036p:plain

3. DLL のヘッダファイルがあるディレクトリを追加する

Project3 を右クリックして、一番下にあるプロパティを選択します。で、構成プロパティ > C/C++ と選び、追加のインクルードディレクトリに追加したい DLL のヘッダファイルがあるディレクトリを選びます。前回作成した DLL の場合、DLLTest.h があるディレクトリを選びます。これで準備完了です。

f:id:pickles-ochazuke:20170705170257p:plain

f:id:pickles-ochazuke:20170705170143p:plain

DLL を使う

実際に使ってみます。手順 1 ですでにソースファイル(main.cpp)を作ってあると思うので、そこに書いていきましょう。
以下のように書きました。

#include <iostream>
#include "../DLLTest/DLLTest.h"

int main()
{
    DLLTest::HelloWorld hello;
    DLLTest::HelloWorld::hello();

    hello.world();
    std::cout << hello.huga << std::endl;

    return 0;
}

DLLTest.h のインクルード場所は、環境によって異なると思いますので、注意してください。ビルドをして通ったら、実行してみましょう。あ、実行の前に、メニュー > プロジェクト > "プロジェクト名"のプロパティ を選び、構成プロパティ > リンカー > システム を選びます。で、サブシステムという欄があるので、コンソールを選び、OK を押します。

f:id:pickles-ochazuke:20170705170722p:plain

実行すると同じであれば、以下のように表示されると思います。

f:id:pickles-ochazuke:20170705171212p:plain

おわり

以上が DLL の使い方になります。プロジェクトとヘッダファイルが必要になるので、どこか共通の場所を作っておくと良いかもしれません。どう管理するといいんだろう……。

以下を参考にしました。

https://msdn.microsoft.com/ja-jp/library/ms235636.aspx