前節に引き続き、「DllExport」にてコンパイルされた.dll の x86 と x64 を見てゆきます。
前節でコンパイルした結果、以下のような.dllが出力されました。
その下には、 x86 フォルダと x64 フォルダが生成されています。
秀丸エディタで利用可能なのは、この x86 もしくは x64 フォルダの中にある.dllです。
開発者プロンプトを開き...
対象の.dllをチェックしてみましょう。
「Debug」もしくは「Release」直下にある.dllは、純粋な「中間アセンブリ」であるため、
GetProcAddress からは「関数シンボル」は見えません。
すなわち、このファイルは秀丸マクロのloaddll文では使えません。
x86(もしくはx64)へと移動し、再び同名の対象.dllをチェックしてみましょう。
x86 もしくは x64 にある.dllは、GetProcAddress から見える「abc」という「関数シンボル」が見えます。
これが DllExport による加工の効果です。
Windowsのビット数ではありません。秀丸エディタのビット数です。
秀丸の「ヘルプ」→「秀丸エディタについて」で32bit edition か 64bit edition かを見ることができます。
秀丸エディタ 32bit 版 | 秀丸エディタ 64bit 版 |
---|---|
x86フォルダの方の.dll が 使える | x64フォルダの方の.dll が 使える |
となります。
これらの.dllは、秀丸マクロから loaddll して使うことができます。
まさにC/C++で作成した.dllであるかのように振る舞いますが、1点異なるのは、
「freedll」は機能しないという点です(秀丸マクロからfreedllしても実際にはdllは解放されない)。
これは「一度読み込まれた中間アセンブリを含んだ.dll」は原則プロセスを閉じるまで解放できないためです。
以下のように「秀丸エディタ 64bit版」でメニューより「動作環境」→「その他」→「64bit版」内の設定をすれば、限定的ながら動作します。
詳細は32bit版との互換性
C#でプログラムを組む際は、使えない主はパターンは
となります。
原則、よほどの事情がない限り、ビット数を一致させたもので動作させるようにしてください。
さて、次章からはいよいよ、秀丸エディタから、.dllを呼び出してみましょう。