※補足
Visual Studio 2019でやります。まぁ古くても新しくても基本的なことは何も変わってないから見た目以外気にしなくていいけど。
※参考
http://pickles-ochazuke.hatenablog.com/entry/2017/07/05/171806
構成
No.1 DLL作成用のプロジェクト用意
No.2 DLL用のcppとhppを作成
No.3 実際に使ってみる
No.1 DLL作成用のプロジェクト用意
DLLを作成するためにプロジェクトを用意します。
少し手間が増えますが以下のようにプロジェクトを用意します。
少し気にかけてほしい部分と注意してほしい部分を丸で囲っときます。
そうしたらこのようなプロジェクトが出来ると思います。
これでDLL用のプロジェクトは終わりですが、実際にちゃんと動くかテストしたいのでDLLを使うテスト用のプロジェクトも用意します。
テスト用なのでコンソールのプロジェクトを作ります。作成の説明は端折ります。設定の説明はこの後にします。
No.2 DLL用のcppとhppを作成
cppとhppを普通のプロジェクトと同じように作成します。
ただし、名前は制限をかける必要があります。名前は必ずプロジェクト名と同じにします。今回の場合はDLLTestです。
そうしたらDLLTest.hppにこのような記述を書きます。これが必須です。
#ifdef DLLTEST_EXPORTS
#define DLLTEST_API __declspec(dllexport)
#else
#define DLLTEST_API __declspec(dllimport)
#endif
今回はテスト用としてDLLTestという名前でプロジェクトを作成しました。
自分用にプロジェクトを作成した場合上のもののこの部分を変えてください。
#ifdef プロジェクト名_EXPORTS
#define プロジェクト名_API __declspec(dllexport)
#else
#define プロジェクト名_API __declspec(dllimport)
#endif
そしたら今回のDLLは足し算したものを出力するという超単純なライブラリにします。
そのためにhppをこのように書きます。
関数の前にDLLTEST_APIというものを書いていますが、これはDLLを使う側が呼べるものに対して書きます。一応分かりやすいように書いてないものも用意します。
#pragma once
#ifdef DLLTEST_EXPORTS
#define DLLTEST_API __declspec(dllexport)
#else
#define DLLTEST_API __declspec(dllimport)
#endif
namespace DLLTest
{
DLLTEST_API int Sum(int a, int b);
int Sub(int a, int b);
}
そしたらcppをこのように書きます。
cppではpch.hを呼ぶのを忘れないようにしてください。
#include "pch.h"
#include "DLLTest.hpp"
namespace DLLTest
{
int Sum(int a, int b)
{
return (a + b);
}
int Sub(int a, int b)
{
return (a - b);
}
}
No.3 実際に使ってみる
では、実際にDLLを呼んで動かしたいと思います。
呼び方は二通りあるのですが、まずはDLLを作りながらデバッグテストを行うための手段でやります。
先ほど調整していたDLLのプロジェクトを呼びます。
そうしたらDLLのプロジェクトにあるDLLTest.hppをインクルードファイルに追加します。
そうしたらDLLTest.hppを使えるように参照に追加します。
これで使えるようになったので以下のように記述してテストします。
#include
#include "DLLTest.hpp"
int main()
{
std::cout << DLLTest::Sum(10, 20) << std::endl;
return 0;
}
で、おkです。
この方法だとDLLTestにて変更を加えて保存をした後にDLLTestを使うプロジェクトにて実行すればすぐ反映されたものを使えるようになります。ちょっとコードでの反映は遅いですが、デバッグテストしながらやる分には良いと思います。
次に完成したDLLを呼ぶ方法を説明します。先ほどのままだと色々と困るので「No.3 実際に使ってみる」にて設定したものをすべて削除します。よくわからない人は新しくプロジェクトを作ってもいいと思います。
では、DLLTestの中にあるこれらを適当なファイルに移します。分かりやすいようにDLLTestを使う側のプロジェクト内にDLLTestという名前のディレクトリを作成してそこに入れます。
それとDLLTest.dllはexeと同じ場所にいないといけないのでexeの出力場所に起きます。
そうしたらDLLTestを使う側のプロジェクトにて設定を行います。
C/C++のインクルードディレクトリに追加します。厳密にはDLLTest.hppを追加します。
リンカーにライブラリディレクトリを追加します。厳密にはDLLTest.libを追加します。
これで終わりです。
ただ分かるようにDLLTestの方はDebugでしかやってないのでDebugのみの調整をしました。Releaseを想定するならそちらの方も同様に設定すればいいです。