DllExport.bat とは、C#の記述だけで、「C/C++のネイティブから使える.dll」を作ることができるようにするためのモノです。
具体的には下記のように「[DllExport]というアトリビュート」を付け加えるだけで、「C/C++のネイティブから使える.dll」になる、というモノです。
ここでは「C#」で作成した.dllを「DllExport.bat」を利用して秀丸から直接利用する方法を解説します。
読者の想定レベルとしては、
といった程度のプログラミング力・開発環境を想定しています。
hm.NET | DllExport | |
---|---|---|
想定ターゲット | 秀丸エディタ 32bit / 64bit 秀丸から利用することを想定したさまざまな支援の仕組みがある。 |
ネイティブおよび中間アセンブリ プログラム全般 秀丸には特化していないため、全て自分で構築する。 |
自作dllの対象プラットフォーム |
.NET Framework 4.5 ~ 4.8 (実際には4.x全般) |
.NET Framework 4.5 ~ 4.8 (実際にはもっと広範、しかし.NET Framework以外は利用メリットはなし。.NET Core 3.1は不正終了しやすい) |
自作dllの対象CPU | ANY CPU | x86 もしくは x64 のうち1つを選択 |
使用技法 | いずれもマイクロソフトが提供している「C++/CLI コンパイラ、C# コンパイラ、.netmodule」 | マイクロソフトのコンパイラでは実現できない、かなりイレギュラーな方法 |
エラー表示 | 間にhm.NETが挟まっているため、わかりやすいエラーが出る。 | 秀丸からの関数の呼び出しまわりでエラーが起きると、ただ不正終了するだけとなってしまうなど、C#の恩恵が一部スポイルされる。 |
実行時の他の.dllへの依存 | hm.NET.dllに依存、VC++ ランタイムに依存 | 特別な依存ファイルはなし。Windowsに最初から入っているもので実行可。 |
DllExportは、そのコンパイルに独特な技法を挟み込むため、将来長く使っていくプログラム、メンテナンスしていくようなプログラムに使うのことはおすすめしません。
しかしながら「DllExport.bat」による技法は、秀丸にととまらず、C/C++言語などネイティブのWin32(Win64)プログラムから読める.dllを、C#で作成できるため、
「C++はほとんど知らないが、C#ならそこそこわかるという人が、ネイティブから呼ばれるdllをいち早く作成できる」という点で一考の価値があるといえます。
秀丸エディタ ver8.73以上
Visual Studio 2019 v16.8以降 を推奨
VisualStudioにて「新しいプロジェクトの作成...」→「Visual C#」→「クラス ライブラリ (.NET Framework)」を選択し、
まずは以下のソースで試してみましょう。
この段階ではまだコンパイルできません。
https://github.com/3F/DllExport/releases
より、「DllExport.bat」をダウンロードします。
以下のようにソリューションファイル(.sln)と同じディレクトリに配置します。
一応、ブロック解除(or 許可する)をチェックしましょう。
DllExportを実行し、以下のように設定します。
「Namespace for DllExport」には[DllExport]という記述があるnamespace名を記載します。
プロジェクトの名前ではなく、[DllExport]という記述があるクラスを囲むnamespace名です。
全て設定したら「Apply」を押しましょう。
Visual Studio にフォーカスを戻すと、ソリューションやプロジェクトの再読み込みが促されるので再読み込みしてください。
「Release」にしてビルドしてみましょう。
以下のように「Release」直下に「ClassLibrary36.dll」があり、
さらに x86 と x64 のそれぞれのディレクトリにも同名のファイルが出力されています。
「Release直下のdll」と「x86 x64」フォルダに出来ているdll の違いを次章で解説します。