Category: "DB-Tracklayer 開発, MySQL, Web, データベース, プログラミング, 開発" , Tags: C++, MFC, MySQL, PocketPC, WindowsMobile
たかぼー@プログラマーです。
前回の投稿でiPhoneからMySQL DBサーバへ繋ぎにいく方法を書きましたが、今回はそれのWindowsMobile版のお話です。
ろーる君が似たようなテーマの記事を投稿しているような気がしますが、きっと気のせいですね。
さて、WindowsMobileと言いますと、iPhoneと違ってリリースされてから結構年数が経っていますし、バージョンアップも繰り返していることから、すでに何かしらMySQL DBへ繋ぎに行く方法が開発されているだろうと思い、探してみたところ、すぐに見つけることができました。
公式サイトにMySQL Connector/NETという.NET版のライブラリがありまして、Compact Framework 2.0に対応している、と表記がありました。
Compact Frameworkというのは.NET FrameworkをWindowsMobileで動作するように機能を最低限にしたりモバイル機に必要なものを別途追加したりしたもので、つまるところ.NETでアプリを開発していればMySQL DBへはすぐに接続できるということになります。
しかし、今回はC/C++言語でやりたいという会社の意向もあり、この方法は使わないことになりました。
(動作速度や消費メモリ、対応OSの面でおそらくC/C++の方が有利)
というわけで今回もiPhone版と同じようにMySQL Connector/CのソースをWindowsMobile用に修正する方向性で作業を進めたわけなのですが、iPhone版と比べてかなり修正箇所が多くなりました。
WindowsMobileでコンパイルするにあたり、通常のWindows版のソースコードを流用していきましたが、
そもそも
- Windows MobileのWin32 APIは本来のWin32 APIの一部しかサポートしていない
- C標準ライブラリも同様に一部しかサポートしていない
- 文字コードはユニコードのみ(APIも基本的にはユニコードのみサポート)
- カレントディレクトリという概念が無い
などと、Windowsとはかなり事情が異なるため、コンパイルエラーが山ほど出ます。
これを一つ一つ潰していく作業が必要になるというわけです。
代替コードを書いたり、マルチバイトからユニコードへ変換するコードを挟んだりしていくわけです。
そうしてようやくエラーを潰し終わっても、これだけでは実はまだ動きません。
WindowsMobileはアラインメントの制約が厳しいため、半端なメモリポインタをintとして読み取ろうとすると実行時にエラーが発生してしまいます。MySQLのソースにそうした変換マクロがいくつか存在しているため、それらを別の手段に置き換える必要があります(1バイトずつ読み込む等)。
これでようやく動くようになりました。
今回はMFCを利用しますので、MySQL C APIのラップクラスを作り、ようやく完成です。
Language: 1 2 3 4 5
[1:日本語, 2:English, 3:简体中文, 4:繁體中文, 5:한국어]


