3753817_s

本記事ではVisual Studio Codeで利用できるコンパイラのMinGwでDLLを作成して、呼び出す方法までを紹介します。

DLLを作成するとか難しそうというイメージをもっている人もいるかもしれませんが、やってみると意外と簡単なのでこの機会に作り方を覚えてしまいましょう。



DLLを作成する


今回は、サンプルとして足し算と引き算を行う関数が実装されているDLLを作成します。

ソースコードは以下の通りです。


DLLのヘッダファイル


// Calc.h
#ifndef H_CALC
#define H_CALC

int addition(int xint y);     // x+yをする
int subtraction(int xint y);  // x-yをする

#endif // H_CALC


DLLのソースファイル


// Calc.cpp
#include "Calc.h"

int addition(int xint y){
    return x+y;
}

int subtraction(int xint y){
    return x-y;
}


オブジェクトファイルの作成(.o)


ソースコードを用意したところでMinGwのG++コマンドを使ってDLLを作成していきましょう。

先ほどのソースコードにもコメントで書いているのですが、ソースコード名はCalc.cppです。

まず最初に-cオプションを使ってオブジェクトファイルを作成します。コマンドは以下のとおりです。

g++ -c .\Calc.cpp

このコマンドを実行するとCalc.cppと同じディレクトリにCalc.oというファイルが作成されます。


DLLの作成


DLLは-sharedオプションを使用することで作成することができます。コマンドは以下のとおりです。

g++ .\Calc.o -o Calc.dll -shared

上記のコマンドを実行するとCalc.dllというファイルが作成されます。

DLLの作成は以上で終了になります。
たったこれだけでいいの問う感じですが、やってみるとむちゃくちゃ簡単なんですよね。



作成したDLLを使う


次に先ほど作成したCalc.dllを呼び出す方法を紹介していきます。


DLLの呼び出し元のソースコード


// main.cpp
#include <iostream>
#include "Calc.h"

int main(void){
    int xy;

    std::cin >> x >> y;
    std::cout << "addition:" << addition(xy<< std::endl;
    std::cout << "subtraction:" << subtraction(xy<< std::endl;
    return 0;
}


コンパイルする


ソースコードができたらコンパイルしていきましょう。

コンパイルのコマンドは呼び出し元のコードをコンパイルするときにDLLの名前を教えてあげるだけです。

g++ -o .\main.exe .\main.cpp .\Calc.dll


実行結果


.\main.exe
3 5
addition:8
subtraction:-2


コンパイルして作成したmain.exeを実行してみると、DLLの関数が呼び出されていることが分かりますね。



まとめ


今回は、MinGwでDLLを作成して、その後作成したDLLを使う方法を紹介しました。

今回はコマンドを全て手打ちで実行していきましたが、ソースコードが増えるとすごく面倒です。

なのでそいうときはmakeファイルを作成してみましょう。

makeファイルの作り方については後日紹介させていただきます。