DllExport.bat ~C#のみで 秀丸マクロ用のDllを作成~
概要
DllExport.bat とは、C#の記述だけで、「C/C++のネイティブから使える.dll」を作ることができるようにするためのモノです。
具体的には下記のように「[DllExport]というアトリビュート」を付け加えるだけで、「C/C++のネイティブから使える.dll」になる、というモノです。
ここでは「C#」で作成した.dllを「DllExport.bat」を利用して秀丸から直接利用する方法を解説します。
読者の想定レベルとしては、
- C#の入門相当の文法は知っている
- C#でとても簡単な50行~100行程度のコンソールアプリケーションなら自力で制作出来る。
- Visual Studio で C#で開発
といった程度のプログラミング力・開発環境を想定しています。
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をいち早く作成できる」という点で一考の価値があるといえます。
[DllExport]を使った最初の dll
まずは以下のソースで試してみましょう。
この段階ではまだコンパイルできません。
DllExport.bat をダウンロード
https://github.com/3F/DllExport/releases
より、「DllExport.bat」をダウンロードします。
以下のようにソリューションファイル(.sln)と同じディレクトリに配置します。
一応、ブロック解除(or 許可する)をチェックしましょう。
DllExport.bat を実行
DllExportを実行し、以下のように設定します。
全て設定したら「Apply」を押しましょう。
プロジェクトをコンパイル
Visual Studio にフォーカスを戻すと、ソリューションやプロジェクトの再読み込みが促されるので再読み込みしてください。
「Release」にしてビルドしてみましょう。
以下のように「Release」直下に「ClassLibrary36.dll」があり、
さらに x86 と x64 のそれぞれのディレクトリにも同名のファイルが出力されています。
「Release直下のdll」と「x86 x64」フォルダに出来ているdll の違いを次章で解説します。
|