概要
前節では、C#等で作られた「中間アセンブリ」の場合を解説しました。
ここではさらに深堀して、「C#で自作するdllがさらにネイティブdllを呼び出す場合にそのパス」を追加する場合を解説します。
厳密にはパス自体を追加するわけではなく、dllを読み込んでしまうことで、以降C#の該当プロセスで自由に使えるようにする、というものです。
ネイティブのdllも同じように場所を指定する必要があります。
直接あなたが作るdllがそのネイティブを利用する場合も考えれますし、
nugetなどを利用して追加した比較的大型な参照アセンブリが、ネイティブdllにも依存している場合も考えられます。
その両方で今回の手法によって簡単に「extern」や「DllImport(***)」(=P/Invokeで宣言)などの既存部分の書き換えなしで解決することが出来ます。
ネイティブdllの作成
まずは、以下のようなネイティブdllを「dll1.dll」として作成し、これをC#側で利用したいとしましょう。
ネイティブdllのパス解決
自作のdllに、以下のような「NativeResolver」とも呼べるプログラムを、追加することで、「ネイティブdllを読ませる」ことが出来ます。
秀丸マクロから最初に呼ぶ予定の「メソッドを含むクラス」の「静的コンストラクタ」に以下のようなものを記述することです。
ポイントは秀丸マクロから最初に呼ぶ予定の「メソッドを含むクラス」の「静的コンストラクタ」に書くことです。
このようにして、dll1.dllの配置場所を自由に操作することができます。