« 2008年8月 | トップページ | 2009年2月 »

SQLite3 Ver.3.6.4

SQLiteを業務で使おうとしてるんだが、VB6がまだまだ現役なので、ネットを探してhttp://www.persistentrealities.com/index.php?p=18なるところを見つけた。VB6.0用のラッパーを含んだDLLをこれで作れる。VB6のテストサンプルもあり、動作完了。めでたしめでたし、となったはずが…。

SQLiteのホームページを見ると、Ver.3.6.4がアップされている。動作確認時は、3.5.9だったので、さっそくダウロードしてやってみることに。どうやら、3.6.xでいろいろとファイルが増えているようである。それらをプロジェクトに放り込んで、VB用にいろいろとソースを修正して、いざコンパイルしてみると、リンクでエラーが出てDLLができない。エラーは、

エラー 1 error LNK2005: _sqlite3_api は既に fts3_tokenizer.obj で定義されています。 fts3.obj SQLite3VB
エラー 2 error LNK2005: _sqlite3_api は既に fts3_tokenizer.obj で定義されています。 rtree.obj SQLite3VB
エラー 3 error LNK2005: _sqlite3_extension_init は既に fts3.obj で定義されています。 rtree.obj SQLite3VB

である。

fts3は3.5.9ではこんな問題なかったなぁ。と、いろいろ調べると、SQLITE_ENABLE_FTS3のプリプロセッサ定義が必要みたいなので(3.5.9では設定してなくても問題なかったのに…)、それと、新しく追加されたrtree.cでも同じだろうということで、SQLITE_ENABLE_RTREEを設定してやってみることに。

え~、まだ、「fts3_tokenizer.obj」で二重定義が出やがる。

仕方ないのでソースを眺めてみると、どうもSQLITE_EXTENSION_INIT1というマクロの使い方がまずそうなことに気がついた。ここで、インターネットを漁っていると、中国語のOKWave見たいなところに、fts3_tokenizerのSQLITE_EXTENSION_INIT1を直接externを付けて展開すれば問題がなくなるとあったので、やっぱりそういうことかということで、無事コンパイル完了。テスト動作もOK。めでたしめでたし。

こんなやり方でいいのかと一抹の不安もなくはない。

なんで、こんなソースになってるんだろうか? SQLiteには全ソースを1つのソースにまとめたamalgamationというのがある。これを見てもSQLITE_EXTENSION_INIT1が2回以上定義されてしまうはず。う~む、処理系の違いかなぁ。少なくとも、VS2008ではLNK2005でリンクが通らないのは確かである。

|

MS-IME+AZIKだと途端にバカになるIME君

自宅ではATOK+AZIKですいすい入力しているのだが、会社では諸般の理由でATOKが使えず、MS-IME+AZIKで使用している。しかし、たまに漢字候補が出てこなくて困る時がある。最初はさっぱり理由が分からなかったのだが、どうもIMEの変換アルゴリズムの問題のようである。

たとえば、「書き込んだ」は、入力そのものは

MS-IME標準だと : ka ki kon da

AZIK配列だと : ka ki kl da

となる。前半の「ka ki」はどちらも同じなので「書き」と変換できるが、後半の「込んだ」がIMEの入力だと変換してくれるが、AZIKだと「KLDA」という入力なのでうまく変換してくれない。どうも、MS-IMEは、ひらがなではなく入力されたアルファベットキーをもとに変換を行っている節があるようで、そのために変換がうまくいかない様である。漢字候補リストに「KLDA」とかが入っているので間違いないと思われる。どうも撥音拡張の単語がうまく変換できないことがあるようだ。もちろん、MS-IME標準の入力だと問題なく変換できる。

たとえば、「セリフを噛んでしまった」をAZIK入力すると「セリフを缶でしまった」になってしまう。ただよくわからないのが「かんで」だけ入力しての候補リストを出すと「間で」「かんで」「カンデ」「KZDE」が出てくるのだが、「セリフ・・・」と文節で入力すると「缶で」「かんで」「カンデ」「KZDE」と候補が変わる。どうなってるんだ?

ちなみに、ATOKでは問題なく変換できる。かといって、もう体はAZIKが染み込んでいるので、いまさら標準の配列には戻せない。ストレスが溜まる一方である。

|

« 2008年8月 | トップページ | 2009年2月 »