VB6でdllをexeから呼び出す

## 参考

* [「VB6.0で、ActiveXDLLを作成し、EXE側から作成したDLLを起動したい」（2） Insider.NET － ＠IT](https://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21337&forum=7&start=8)


## dllの作成

* ActiveX DLL を選択

![スクリーンショット_2020-05-10_15-40-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/b17cdd48-aa6b-16a3-716a-6622fe6ded45.png)

* Project名の変更

![スクリーンショット_2020-05-10_15-43-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/129f2bc4-6712-5890-5bb8-0d0da99a2b1d.png)

* プロジェクト名に`MyDLL_1`を入力しOK

![スクリーンショット_2020-05-10_15-45-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/d0d36ae4-3dbd-3597-3788-3645b1aad229.png)

```vb
' 引数をそのまま返すだけ
Public Function GetStr(str As String) As String
    GetStr = str
End Function
```

* ファイル - `MyDLL_1.dll`の作成

![スクリーンショット_2020-05-10_15-47-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/a2456930-a590-3441-d969-8a534ec877bf.png)

* `MyDLL_1.dll`を保存

![スクリーンショット_2020-05-10_15-48-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/7b51c5bf-814d-54b7-d4f2-9b01ede4f27c.png)


## EXEから呼び出し

* `標準 EXE` を選択し開く。

![スクリーンショット_2020-05-10_15-50-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/464fafd5-10e6-b269-0612-606c1876eb04.png)

* 参照設定

![スクリーンショット_2020-05-10_15-51-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/fb76f173-7c89-3258-5c05-14755d273613.png)

* `MyDLL_1`にチェックを入れ、OK

![スクリーンショット_2020-05-10_15-52-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/64782c33-323d-198d-c4d1-8ccf552d87da.png)

* ボタンを設置。設置したボタンをダブルクリックする。

![スクリーンショット_2020-05-10_15-53-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/ca4d4533-8250-0381-b682-36e7aa1bd64a.png)

* こういう画面になるので、そこにコードを入力。

![スクリーンショット_2020-05-10_15-55-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/cfb50b78-3cbd-a9ee-d529-731ece90247f.png)


```vb
Private Sub Command1_Click()

    Dim c As New MyDLL_1.Class1
    msgbox c.GetStr("あいう")

End Sub
```

![スクリーンショット_2020-05-10_15-57-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/ed9fa882-8825-56c7-1682-ad11d6dd6fb1.png)

* 再生ボタンを押すとフォーム画面が表示される。ボタンをクリックすると「あいう」とメッセージが表示されることを確認。

![スクリーンショット_2020-05-10_15-58-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/93caff23-bd8c-3b98-aa4c-93c820255ba8.png)

* 確認したら 停止ボタンを押し、編集画面に戻る。

## exeの作成

* ファイル - `Project1.exe` の作成を選択。

![スクリーンショット_2020-05-10_16-00-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/e220bb28-73f2-bfbf-a86a-f3f4d21111fd.png)

* `Project1.exe` を別のPCに転送し実行すると以下エラーが出る。
* exeと同じフォルダにdllを置くだけでは読み込まれないため注意。(謎)

![スクリーンショット_2020-05-10_05-44-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/501c646e-4a8a-87d4-dc2b-5171a4efad71.png)

### DLL の登録

* コマンドプロンプトを管理者として実行をし、以下コマンド

```go
regsvr32.exe MyDLL_1.dll
```

![スクリーンショット_2020-05-10_16-10-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/fffd2fb8-5fc5-0db0-2e12-ae16b60d02e3.png)

* 動作することを確認

![スクリーンショット_2020-05-10_16-12-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/e5b05dca-e76e-91f0-eedb-033e0c75095a.png)


### DLL の登録削除


```go
regsvr32.exe /u MyDLL_1.dll
```

![スクリーンショット_2020-05-10_16-15-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/342c97a1-3fe5-6555-1236-b75940154869.png)

* 再度実行したとき、エラー表示されることを確認。

![スクリーンショット_2020-05-10_16-16-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/1eea09d0-bf6f-3f82-fd4a-ea9779ee8bee.png)