|
カテゴリ:ソフトウェア開発のこと
久しぶりのブログ。ふと思い立って、LinuxやUNIX環境でWindows アプリケーションを動作させる Wine を使い、A5:SQL Mk-2の動作検証を行った。
■試した環境 OS : Ubuntu 11.04 Wine : 1.2.3 ("$ sudo apt-get install wine1.2" でインストール) 記事中では一部1.3系についても言及 A5:SQL Mk-2 : Version 2.6.2, 2.7.0 のベータ版(未公開のナイトリービルドなども含む) ■現状の成果 A5:SQL Mk-2を起動し、SQLエディタ・テーブルエディタ・ERエディタを動作させることに成功。フォント設定は利用者が適宜行う必要あり。ERエディタはWine側に対応が必要。OracleとMySQLに対して直接接続にてSQLの実行などが出来ることを確認。 印刷やExcelへの出力(テーブル定義書の出力も含む)などについては未検証。 ■とりあえず問題点 フォントを設定しないと日本語表示が化ける。 → オプションダイアログより全体のフォントと、SQLエディタのフォントを適宜設定 A5:SQL Mk-2 Version 2.7 系では自動で代替処理するなどもう少し突っ込んだ修正をするかも。 → ER図はER図プロパティから変更。コメントやシェイプオブジェクトのフォントも個別に設定 データベースツリーが正しく動作しない。 → 最新のベータ版で修正 タブを切り替えると表示が乱れる場合がある。 → 最新のベータ版ではある程度改善(不完全?) テーブルエディタを開こうとするとエラー → MDACをインストールすると良い。(Windows 2000と同じ状態) → 最新のA5:SQL Mk-2 ベータ版では必ずしもMDACは必要なくした(Oracle, MySQLなら不要)。 半透明APIがサポートされないらしい? → ノーケア ラベルの改行がされていない → ノーケア ERエディタは表示した瞬間・または少し操作するとフリーズ → Wine 1.2.3も1.3.15もフリーズ → gdiplus.dllをnativeライブラリを利用するように設定するとフリーズしないが、ライセンス的に問題あり?(後述) → WineのgdiplusにてGdipDrawString関数にGDIフォントのリソースリークあり(後述) ■Wineのgdiplusについて調査 どうも、文字表示時にリソースリークを起こしている模様。Wine 1.2.3のgdiplusのソースを読んでいくと、GdipDrawStringにリソースリークを起こしているらしき箇所を発見。Wine 1.3.15でも該当は修正されていなかったが、Wine 1.3.25では実装がガラリと変わっており、該当不具合も無くなっている(不具合を修正したのか、実装を変えた時に不具合も勝手に消えたのかは不明)。 Wine 1.3系はまだベータ扱いであるし、Wine 1.2.3を修正してコンパイルし、gdiplusのモジュールだけ手動で更新してみることにする。 ■Wine 1.2.3のビルドとgdiplusモジュールの入れ替え手順 ソースは http://sourceforge.net/projects/wine/files/Source/ から取得。以下で展開 $ bzip2 -dc wine-1.2.3.tar.bz2 | tar xvf - Ubuntu標準ではモジュールが足りないらしいのでインストール(やらないと./configureでエラー) $ sudo apt-get install flex $ sudo apt-get install bison $ sudo apt-get install xserver-xorg-dev $ sudo apt-get install libfreetype6-dev dlls/gdiplus/graphics.c を修正 GdiDrawString()内で以下の行を見つけ出し修正 (Wine 1.2.3では3920行目のはず) 修正前 DeleteObject(SelectObject(graphics->hdc, CreateFontIndirectW(&lfw))); 修正後 DeleteObject(SelectObject(graphics->hdc, gdifont)); 上記の修正を行ったうえでmakeを行う。特定のDLLだけmakeということも出来るみたいだが、とりあえず普通にmakeしてみる。 $ ./configure $ make makeは終わるまで待たなくとも良い。dlls/gdiplus/gdiplus.dll.so が出来たらそれをコピー。古いgdiplus.dll.soは念のため保存。 $ sudo mv /usr/lib/wine/gdiplus.dll.so /usr/lib/wine/gdiplus.dll.so_ $ sudo cp dlls/gdiplus/gdiplus.dll.so /usr/lib/wine/gdiplus.dll.so A5M2.exe を起動し、ERエディタでフリーズしないか確認する。 ちなみに、1.3.25はリソースリークはないが、縦方向のAlignがうまく動作しないなどの問題がある。 ■Microsoft製ライブラリをMicrosoft以外のOSで利用することについて追記 とりあえず、Microsoftさんはいい顔しないだろうなぁと思う。調査したが、自分はYesともNoとも言える立場にないので、以下の記述は単なる個人的な意見。 MDAC 2.8 SP1に付属のmdaceula.rtfでは特に明記されていない。ただし、「本契約書に特に規定されていないすべての権利は、マイクロソフトによって留保されます。」と記載されているのでマイクロソフトがNoといったらNoかもしれない。Yesと言ってくれる可能性は期待できないと思う。 gdiplusの再配布モジュール(KB975337, Platform SDK Redistributable: GDI+)のeula.txtでは「The supplement is identified for use with one or more Microsoft operating system products」と記載されており、さりげなくMicrosoft製のOSのみに限定している気がする。しかし、ライブラリって「サプリメント」なの?。まあ、補助的なソフトウェアだから…?。 winetricks ではMDACもgdiplusも普通に入ってしまう。ライセンス上問題ないと判断している?。 ちなみに、gdiplusの再配布モジュールのeula.txtは、アプリケーションに添付しろとも添付するなとも書かれていない。ほかのソフトウエアで添付されていなかったのでA5:SQL Mk-2でも添付しなかったけど良いのかな?。 お気に入りの記事を「いいね!」で応援しよう
Last updated
2011/09/29 02:52:53 AM
コメント(0) | コメントを書く
[ソフトウェア開発のこと] カテゴリの最新記事
|
|