misty247

misty247

2011.06.28
XML
テーマ: 点字・点訳(23)
カテゴリ: 点字・点訳
 ◆ Mission4. ibukiTenC SDK 呼出テスト ◆

 処理結果を返してくれるバッファを確保しなければならないが、どれぐらいのサイズを確保すればよいのか、正確にはわからない。漢字の読み仮名が何文字になるか、わからないからである。「慮る」「承る」とか使われていると、バッファは食われる。
 ちなみにJIS漢字で、一番長い読み仮名になる漢字は「糎」で、これで「せんちめーとる」と読むのだそうだ。大漢和辞典には、もっと長い読み仮名の漢字がたくさん載っているらしい。「示豆」で「まつりのそなえもののかざり」。これだと1文字が13文字、濁点入れて14文字だ。詳しくは こちらを
 バッファ不足はエラーで返してくれるので、妥当なあたりにしておこう。原文の文字数の3倍みておけば十分だろう。これに最低確保分をつける。

 とりあえず動作テストをしてみるだけのマクロを、以下のように記述した。

 Option Explicit

Private Declare Function IbukiTenSetup Lib "ibukiTenC.dll" _
Alias "?IbukiTenSetup@@YGHPBD0@Z" _
(ByVal sDic As String, ByVal sPATH As String) As Long

Private Declare Function IbukiTenGetNabcc Lib "ibukiTenC.dll" _
Alias "?IbukiTenGetNabcc@@YGHPBDPADPAHH_N3H@Z" _
(ByVal sSource As String, ByVal sNabcc As String, _
ByVal lTaiou As Long, ByVal lLength As Long, _
ByVal lIsFirstTextInParagrath As Long, _
ByVal lIsNumberWago As Long, _
ByVal lTransBrlMode As Long) As Long

Private mfSetup As Boolean

'--------*---------*---------*---------*---------*---------*---------*---------
' 点字一筆くん Macro
Public Sub 点字一筆くん()

Const s_PATH As String = "C:\Program Files\ibukiTenC\dic\"
Const l_MIN_BUF_SIZE As Long = 256
Const l_NO_FIRST_TEXT As Long = 0 '先頭2マス取らない
Const l_NO_NUMBER_WAGO As Long = 0 '数字を和語にしない
Const l_TRANSE_MODE_JPN1ENG As Long = 0 '日本語点訳1級英語

Dim sSource As String
Dim lBufSize As Long
Dim sNabcc As String
Dim sTaiou As String
Dim lngRet As Long
Dim lPos As Long
Dim lCode As Long
Dim sResult As String
Dim sErrMes As String

'未初期化の場合、点訳用辞書を指定します。
If Not mfSetup Then
If IbukiTenSetup(s_PATH & "initdic.pat", s_PATH) = 0 Then
MsgBox "辞書の読込に失敗しました"
Exit Sub
End If
mfSetup = True
End If

'原文に応じてバッファを確保
sSource = ActiveDocument.Content.Text
lBufSize = l_MIN_BUF_SIZE + LenB(sSource) * 3
sNabcc = String(lBufSize, vbNullChar)
sTaiou = String(lBufSize * 2, vbNullChar)

'DLL呼出:API1文を入力して点訳を実行しNABCCコードを取得
lngRet = IbukiTenGetNabcc(sSource, sNabcc, StrPtr(sTaiou), lBufSize, _
l_NO_FIRST_TEXT, l_NO_NUMBER_WAGO, l_TRANSE_MODE_JPN1ENG)
If lngRet = 1 Then
Do
lPos = lPos + 1
lCode = Asc(Mid(sNabcc, lPos, 1))
sResult = sResult & Hex$(lCode) & ":"
Loop While lCode <> 0
ActiveDocument.Content.Text = sSource & vbCr & sResult
Else
Select Case lngRet
Case -1: sErrMes = "入力テキストがありません"
Case -2: sErrMes = "点訳に失敗しました"
Case -3: sErrMes = "NABCC変換DLLの読み込みに失敗"
Case -4: sErrMes = "バッファからあふれました"
End Select
MsgBox sErrMes
End If

End Sub

 対応表出力用バッファ(int *piTaiou)は、使用しないので、適当なバッファを与えておくだけにする。intは4Byteなので文字数の倍を確保してある。(64ビットOSでどうなるかは悩まないことにする)

 "sdk064.html"に「彼がAを10個買った」の実行結果は
"2a 47 22 2a 20 3b 2c 41 20 39 20 23 41 4a 5b 20 2a 31 4f 20"

 さて、うまく動くかテスト。
 ドキュメントに「彼がAを10個買った」と書いてマクロを実行。

"2A:47:22:2A:20:3B:2C:41:20:39:20:23:41:4A:5B:20:2A:31:4F:20:0:"

 よし、Successだ。正しい結果が返ってきた。
 これで一番コアな部分、ワードと点訳エンジンの結合の目処がついた。





お気に入りの記事を「いいね!」で応援しよう

Last updated  2011.06.28 22:31:03
コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: