2008/01/18(Fri)漢字の読みを得るには

はてブ数 2008/01/18 15:31 プログラミング::HSP3 つーさ

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 だけなんでグローバルスコープになるんか、ちょっと納得いかんね。