Modについてのあれこれ。FoModの作り方、Mod導入時のトラブル事例などのニッチな話を書いていきます。MigemoMigemoってご存知でしょうか。ローマ字入力で漢字を検索しようというライブラリで、Emacs、Vim、SAKURAといったテキストエディタでよく使われています。C#でMigemoが使えないかどうか試してみました。結論から言うと上手く行きました。引っかかるところもあったので、忘備録を兼ねてまとめておきます。※自作のツールへの組み込み作業で新しいことが分かったら随時追記します。今回はVimでお世話になっているKaoriyaさんのC/Migemoを使うことにしました。C言語による実装で、Vim用のアドオンと共に、単独で利用できるDLLも用意されています。2015のC#を使いました。作成手順は次の通りです。C#を起動して、新規プロジェクト(Windowsフォームアプリケーション)を作成する。(2)ライブラリと辞書の追加プロジェクトフォルダに次のファイルをコピーする。tools/Migemo.csソリューションエクスプローラーに次のファイルを追加する。migemo.dllmigemo.csdict/cp932フォルダと中のファイル全部(フォルダごと)ソリューションエクスプローラーでdict/cp932下のファイルとmigemo.dllを選択し、[出力ディレクトリにコピー]を"新しい場合はコピーする"に変更する。(3)フォームの作成Form1.csのデザインを開いてTextBox、Button、RichTextBoxを配置した後、Form1のLoadイベントとbutton1のClickイベントを追加する。Form1.csのコードを開き、次のコードを追加する。}Migemo.csのコードを開き、DllImportの引数CallingConvention.CdeclをCallingConvention.StdCallに変更する。しないとMigemoのAPI呼び出しでPInvokeStackImbalance例外が発生する。migemo.dllのAPIエントリは__stdcallで定義されているのでStdCallが正しいと思うのですが、私の試した範囲では、組み込み先のプロジェクトによっては変更しなくても動作したりします。パスの通った別フォルダにすごく古いバージョン(2003年!)のmigemo.dllがあるためでした。最新版のmigemo.dllでは必ずこの修正が必要です。obj);これで完成です。ビルドすればEXEが作成されるはず。テストしてみるテキストボックスにローマ字を入力して検索ボタンを押します。今度は少し長い文章を。語の切れ目を大文字にしてあげる必要があります。