2008/01/18(金)漢字の読みを得るには
2012.08.04追記。Windows8 RP対応。
MSIMEのCLSIDがかわっていて動かない。
CLSIDを直で書いていたのを、アプリケーションIDからCOM作ってQueryするように変更。
RTM版ではどうなるかわからないけど、たぶん前のWindowsとは互換性がなくなるのだろう。
追記ここまで。
難攻不落と思われた漢字逆変換問題だが、
A_Aと名乗る人物のたった一行の書き込みにより、
事態は急速に解決へと向かったのであった。
というわけで、モジュール化してみた。
春日の山に が しゅんじつのやまに とか出てくるが、
そこはご愛敬なのだと思う。
ライセンス: NYSL
/* jprevcnv.hsp v0.02 */
#module mod_JPRevConv
#uselib "oleaut32.dll"
#cfunc SysAllocString "SysAllocString" wptr
#func  SysFreeString "SysFreeString" int
#cfunc SysStringLen "SysStringLen" int
#define IID_IFELanguage "{019F7152-E6DB-11D0-83C3-00C04FDDB82E}"
#usecom  IFELanguage@mod_JPRevConv IID_IFELanguage
#comfunc FELang_Open 3
#comfunc FELang_Close 4
#comfunc FELang_GetPhonetic 7 int, int, int, var
#deffunc init@mod_JPRevConv
	newcom pIME, "MSIME.Japan"
	querycom pFEL, pIME, IFELanguage
	FELang_Open pFEL    
	return
#deffunc deinit@mod_JPRevConv onexit
	FELang_Close pFEL
	return
#defcfunc JPRevConv str string
	inBstr = SysAllocString(string)
	FELang_GetPhonetic pFEL, inBstr, 1, -1, outBstr
	dupptr outWstr, outBstr, SysStringLen(outBstr)*2+2, vartype("str")
	ret = cnvwtos(outWstr)
	SysFreeString inBstr
	SysFreeString outBstr
return ret
#global
init@mod_JPRevConv
mes JPRevConv("冬過ぎて春来るらし朝日さす春日の山に霞たなびく")
#usecom だけなんでグローバルスコープになるんか、ちょっと納得いかんね。