先日、秀丸マクロ用の DLL を作りました(秀丸で HSP のスクリプトをコンパイルする hspcmp のラッパーDLL作った ( Fuji Diablog ) )。 DLL のだいたいの作り方がわかったので、今度は変換モジュールを作ることに挑戦しようと思っています。
変換モジュールを作るときには、変換モジュール開発キット(ページ下部)のドキュメントやサンプルはもちろん、ライブラリ上のソースを公開している変換モジュールなども参考になるかと思います。作り方を解説しているウェブページは探した範囲ではなかったですが、第V部~マクロから呼び出すDLLの作り方は、秀丸用の DLL を作るという点では同じなので参考になるのではないでしょうか。また、フォーラムにて変換モジュールについての質疑応答が行われていました。( 秀丸エディタ マクロ作者会議室 - スレッド05108, 06/03/22 )
とりあえず最初は、 'Hello, World!' に変換する変換モジュールを作ってみました。
#include <windows.h>
#include "HmFilter.h"
struct HIDEMARUFILTERINFO aFilterInfo[] = {
{ sizeof(HIDEMARUFILTERINFO), "HelloWorld", "Hello World...", "Hello World...", 'H', 0, 0, 0 },
{ 0, NULL, NULL, NULL, NULL, 0, 0, 0 }
};
extern "C" __declspec(dllexport) HIDEMARUFILTERINFO* _cdecl EnumHidemaruFilter() {
return aFilterInfo;
}
extern "C" __declspec(dllexport) DWORD _cdecl HidemaruFilterGetVersion() {
return (1 << 16) + (0 << 8) + 0; // 1.00
}
extern "C" __declspec(dllexport) HGLOBAL _cdecl HelloWorld( HWND hwndHidemaru, WCHAR* pwszIn, char* pszParam, int cbParamBuffer ) {
WCHAR str[] = L"Hello, World!";
HGLOBAL hmemDest = ::GlobalAlloc( GMEM_MOVEABLE, sizeof( str ) );
WCHAR* pwDest = (WCHAR*)::GlobalLock( hmemDest );
::lstrcpyW( pwDest, str );
::GlobalUnlock( hmemDest );
return hmemDest;
}
続く(予定)。今度は、固定の文字列に変換するのでは全く有用でないので、変換対象文字列によって返す文字列も違うものになる変換を作ろうと思います。