投稿

オリジナルでは発見されないバグ

MFC版のソフトウェアをQt版へ移植する際、 驚いたのは2個重大なバグが発見されたこと。 それも普通に実行して止まるのである。 ところがそのコードはC++で.hや.cc(.cpp),.cを含め、 800個以上(ちなみに全てをGoogle C++ Styleに変更中)の ソースファイルだが8年以上MFC で動作していたものだ。 それがQt版となり、メモリアロケーションの位置が変わったために、 発見できたのである。  ここには我々がおこなっている、 テストに問題が存在するということを証明している。 尚、バグは以下ことがらだった Bitmapのメモリ算出でバグがあり、メモリオーバーランしていた。 rectの初期化を忘れいた。 さて、これを自動に発見させるにはどう対処したらよいか。。。

QtとMFC

MFCからQtヘ移植する際、戸惑うのは。。。  CObjectとQObject     これらは、見た目は同じようだが内容は、まったくことなる。 CObjectはオブジェクトの型チェックやシリアライズを提供するもの。 QObjectは、誤解を恐れずに書くとOSのプロセス管理とおなじような機能がある。 したがって、移植する際は注意するべき。  なお、最近はまったのはQThreadとCWinThread、両者はともイベント(メッセージ)キューをもち、イベント(メッセージ)ループがあるが、Notifyの方法がことなる。 前者はsignal and slotを使い、後者はMessageを使う。 その際、connectのsignal  and slot関数の引数部はQtのプリミティブな型しか受け付けないので注意すること、たとえば移植移行期にはWPARAMやLPARAMなどを使って試すと思われるが、slotを呼んでくれない。 しかも、コンパイルエラーや実行時にエラーメッセージなどは表示されない。 ただ、呼ばないのである。 (補足:これは出来るだけ アプリケーションが強制終了 しないようにと考慮されているため)

クロスプラットフォームについて

本格的なアプリケーション制作で、 自由なクロスプラットフォームを求めるのならば、以下の優先順位で使うこと。 標準ライブラリ Boost wxWidget NSPR Qt 避けたいもの、 MFC Cocoa GTK+ 基本的な考えとしては、そのライブラリのライセンスに依存する。 書いていないがJAVAに関してはモバイル環境では遅いのが難点。 ��もちろん、これは時代と共に良くなる) Pythonも有力だが、もう少し、 時間がひつようかもしれない。 .NET向けに作っても結果的にはWindows系のOSしか使えないので、 無理がある。 また、 その互換なものがあってもJAVAのように、 邪魔されたりライブラリが不安定な状況だ。 これは基本的にMSが 強力にライセンスを保持しているので先がみえてると、 多くの開発者が感じるからだろう。 尚、これは作成するコア部に関してであり、GUI部にたいしては、 wxWidgetやQtなどがある。 しかし、iOSなどで使用禁止、 になる可能性が高いため、いまのところ専用に作るしかなさそうである。

iOS系リンク

Bigginning iPhone 2 Developmentなどから抜粋したもの+アルファ フォーラム http://devforums.apple.com/ http://www.iphonedevsdk.com/ http://discussions.apple.com/category.jspa?categoryID=164 http://discussions.apple.com/category.jspa?categoryID=201 WEBサイト http://www.mosa.gr.jp/ http://www.cocoa-study.com http://www.iphonedevbook.com/ http://www.cocoadevcentral.com/ http://nscodernight.com/ http://cocoablogs.com/ http://www.iphonedevcentral.org/ http://www.iphonesdkarticles.com/ http://stackoverflow.com/ ブログ http://theocacao.com/ http://www.wilshipley.com/blog/ http://rentzsch.com/ http://eschatologist.net/blog/ http://cocoacast.com/ http://iphonedevelopment.blogspot.com/ http://www.davemark.com/

C++をMacOSやiOSへ移植するときに読みたいテックノート

ADCへ飛ぶ: Techniclal note TN2185  (English版は ココ ) この資料にはGCC Visiblity(VisualStudioでいうDLL)のことが記載され、 その宣言などのテクニックが書かれている。 注目すべきは、複数あるVisiblity制御方法の優先順。 また、 throwやdynamic_castを行う際はそのオブジェクトはVisibleにすること。    

iPhone開発のおすすめ本

Beginning iPhone3 developmentがオススメ。 英語版ですが、日本語版は古いのと難しいところにさしかかると訳がへんになっているため、読む側は2重苦なります。 eBook版も登場しているのでKindle版が手持ちのiPadやPCで読むことができるのでとても重宝します。 購入はwww.amazon.comからになります。 尚、この本で物足りなくなった場合はMore iPhone3 Developmentがよいでしょう。ただ残念ながらeBook版がまだありません。

cpplint.pyのプチハック

最近、よくつかうツールにGoogleからオープンソースで公開されているcpplint.py。 関心に思うのはHeaderファイルのガードでラベルがほぼ正確に提案されること。 なぜこんなことができるかとソースを覗いたら、予想通りリポジトリのフォルダーを基準にしていた。 ただ.gitも対応しているのか少し気になったが、それも探しているようであった。 考えることは皆同じであるw .svnを優先に探し.gitや.hgを探している。