小窓
VB.NETによるDLLの作成 [VB.NET]

作成日:2020/9/11

我が家におけるDLL作成ルール

0. 概要

ここでは、 VB.NETでDLLを作成し、 そのDLLを呼び出して使用する手順を解説する。

「作成」して「呼び出す」ことが最大の目的であるため、 それぞれのソースは必要最小限にして、 目的から外れた余分な記述は一切省いてある。

記事の構成は、

である。

1. DLLの作成手順

1-1 【「Visual Studio 2019」を起動する。】
「Visual Studio 2019」は2件登録されているが、アイコンが win00010z の方をクリックする。

vb00030f.png 1-2 【Visual Studio 2019】画面
「Visual Studio 2019」のスタート画面が表示される。
右側一番下の「新しいプロジェクトの作成(N)」をクリックする。

vb00030b.png 1-3【新しいプロジェクトの作成】画面(候補の絞り込み)
「新しいプロジェクトの作成」画面が表示される。
ここで、下の一覧表に表示される候補を絞り込む。
左の画像のように、言語は「Visual Basic」を選択する。
続いて、プラットフォームは「Windows」、プロジェクトの種類は「ライブラリ」を選択する。
この操作は必須ではないが、下に表示される一覧の量が少なくなるので探しやすくなる。

vb00030c.png 1-4【新しいプロジェクトの作成】画面
上記の操作により、候補は10件以下になり、選択しやすくなった。
Visual Basic(VB)の「クラス ライブラリ(.NET Standard)」をクリックして選択し、「次へ(N)」をクリックする。
候補を絞り込んでいるので間違えることは無いと思うが、画像内の青色の部分をもう一度確認しよう。

vb00030g.png 1-5 【新しいプロジェクトを構成します】画面
各種情報を入力する。
プロジェクト名とソリューション名はわざわざ異なった名称にする必要はなさそうだが、 この後の作業で、 入力した名称と出てきた結果の対比を取りやすいようにそれぞれ異なった名称を入力することとする。
この手法は後の処理でも同様で、すべて異なった名称を指定している。
入力完了後は、「作成(C)」をクリックする。

vb00030h.png 1-6 【VBのエディター】画面
「作成(C)」をクリックすると、 このような空のVBソース画面が表示される。
「作成(C)」がクリックされたのちに、 「\Source」内に「プロジェクト名」で指定した名称のディレクトリを作成し、 その中にソリューションファイルなどを作成した後、 ソリューションファイルが自動的に起動されてこのような画面が表示されたものである。
赤枠の「Class1.vb」の名称は他と重複しないので変更はしない。

vb00030i.png 「場所(L)」で指定した「|Project\Source」のディレクトリ構成はこの様になる。
(概念のみ。詳細をすべて記述した訳ではない。)

Public Class PublicClass
  Public Function TestDLL() As String
    Return "TestDLL Called"
  End Function
End Class
1-7 【VBコードの入力】
このソースを左の内容で置き換える。
この関数(TestDLL)は Public で定義してあるので外部から参照することができる。

1-8 【プロジェクトのプロパティを設定】
「プロジェクトのプロパティ」を開いて、 「アプリケーション」と「コンパイル」を設定する。
ここでも、名称に関してはあえて異なる名称に変更した。
併せて、これまでに設定した各種の名称もここにまとめておく。

1-9 VBをReleaseでビルドする。
作成したVBをReleaseでビルドする。
場所(L)」に入力したディレクトリ下に

2. DLLの呼び出し方法

2-1 【「Visual Studio 2019」を起動する。】
DLLは他のプログラムから呼び出されて初めて機能を発揮するものである。
ここでは、 登録したDLLを呼び出すための手順を解説する。
簡単なフォーム アプリケーションを作成してDLLを呼び出すことにする。
「Visual Studio 2019」は2件登録されているが、 アイコンが win00010z の方をクリックする。

vb00030f.png 2-2 【Visual Studio 2019】画面
「Visual Studio 2019」のスタート画面が表示される。
右側一番下の「新しいプロジェクトの作成(N)」をクリックする。

vb00030b.png 2-3【新しいプロジェクトの作成】画面(候補の絞り込み)
「新しいプロジェクトの作成」画面が表示される。
ここで、下の一覧表に表示される候補を絞り込む。
左の画像のように、言語は「Visual Basic」を選択する。
続いて、プラットフォームは「Windows」、プロジェクトの種類は「ライブラリ」を選択する。
この操作は必須ではないが、下に表示される一覧の量が少なくなるので探しやすくなる。

vb00030j.png 2-4【新しいプロジェクトの作成】画面
「Windows フォーム アプリケーション (.NET Framework)」をクリックして選択し、「次へ(N)」をクリックする。

vb00030k.png 2-5【新しいプロジェクトを構成します】画面
「プロジェクト名(N)」と「ソリューション名(M)」は「DllTestMain」としておく。
「場所(L)」(VBソースの保管場所)を指定する。(「\Project」は説明の都合上の場所。「参照」をクリックしてフルパスで指定する)
「ソリューションとプロジェクトを同じディレクトリに配置する(D)」はチェックしない。(チェックしても良いが今回はしない)
「作成(C)」をクリックする。

vb00030l.png 2-6【VBのエディター】画面
「場所(L)」で指定したディレクトリ「\Project」内に、 「ソリューション名(M)」で指定したソリューション名(DllTestMain)のディレクトリが作成され、 その中に保存されたソリューションファイルが自動的に起動し、 この画面が表示される。
このままでは、このプログラムでDLLを見ることができない。
先ず、このプログラムでDLLを見ること(参照すること)ができるようにする。
左の「ソリューション・エクスプローラー・ウィンドウ」内の、 プロジェクト名の左にある三角形をクリックして、このように展開し、
「参照」を右クリックして「参照の追加(R)」を選択する。

vb00030o.png 2-7「参照マネージャー」画面
「参照マネージャー」画面が表示される。
「参照」をクリックし、 「1-9【VBをReleaseでビルドする】」 で作成した「UlibProjectNameAsm.dll」をクリックして選択する。

vb00030p.png 2-8「参照マネージャー」画面(取り込み後)
このように「ClassLibrary1.dll」が取り込まれた。
「OK」をクリックする。

vb00030q.png 2-9【ソリューション エクスプローラー】画面で確認
左の画像は【VBのエディター】画面の内、「ソリューション エクスプローラー」部分だけを取り出したものである。
念の為「ソリューション エクスプローラー」の「参照」の左の三角形をクリックして展開すると、
このように「UlibProjectNameAsm.dll」が追加されている。
これで、このプログラム「DllTestMain」から自作のDLLを呼び出すための準備が完了した。

2-10「Shown」イベントの作成

Form1のShownイベントを作成する。(イベントプロシージャの作成方法の説明は割愛する)

ルート名前空間
  • ルート名前空間(R):UlibProjectNameSpace ' 「UlibProjectNameSpace」はオブジェクト参照される名称。(ふたつの内、その1)

    クラス名
  • クラス名:PublicClass ' 「PublicClass」はオブジェクト参照される名称。(ふたつの内、その2)
  • Public Class Form1
    
       Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
          ' TestDLLの呼び出し。その1
          Dim obj As New UlibProjectNameSpace.PublicClass()
          MessageBox.Show(obj.TestDLL())
    
          ' TestDLLの呼び出し。その2
          MessageBox.Show((New UlibProjectNameSpace.PublicClass()).TestDLL())
    
          Me.Close()
    
       End Sub
    
    End Class
    

    ここでは、自作DLL(TestDLL)を2回呼び出している。
    このDLLは「1-7【VBコードの入力】」でコードを入力したとおり「TestDll Called」の文字列を返すだけなので、 「TestDll Called」の文字を2回表示する。

    2回呼び出しているのは、呼び出し方法が異なっているからである。

    TestDLLの呼び出し。その1
    「obj」名前の変数を用意してオブジェクト参照を定義している。
    以降、何回呼び出しても「obj.TestDLL()」で呼び出すことができる。
    TestDLLの呼び出し。その2
    こちらは、変数を定義せずに呼び出している。
    まず、オブジェクト参照の部分を「(New UlibProjectNameSpace.PublicClass())」とコーディングし、 続けて関数部分の「TestDLL()」をコーディングしている。
    どちらも正常に呼び出すことができるが「その2」の方は視認性が良くないと思える。