Wednesday, September 07, 2005

Managed C++

C++/CLIなどという面白そうなものが出てくるので、
布石にManaged C++をやっておこうと思い文献をあさった。
しかし、ネット上に転がってるものはMicrosoftのサポートがほとんどで、
いまいち受けが良くない気がする。
まあ、.NETのヘルプを見ていて分かったのは
Managedは「C++のショートカット的な部分を廃して
いろんなもんをWindowsフォームのライブラリに規格化して
Java風にしましたがどうですか」という言語だってこと。
たとえば2項演算子の定義なんかが、まずラッパー関数を作りなさいというのがJavaっぽい。
a1 = a2+a3 => a1.copy(a2.add(a3))
拡張っていっても既存コードの書き換えははっきり言って大変だと思う。

VC++だけでいろんなことができてしまう完結性から、
あえて.NETにあわせてCRTにしたいと思う人があまりいないのかもしれないし、
C++の開発環境なんていくつもあって全部.NETに最適化されてるわけでないから
やっぱり移行が進まないのかもしれない。
もしくはC++は本当にもう過去の言語なのか?

//a2の元の値が消えちゃった?あれ

Sunday, September 04, 2005

MFCバグ:最適化

「MFCでreleaseにすると動きがおかしい」バグ
参考
ref1::@IT:特集:Visual C++ 2005 いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005
ref2::MSDN マネージ型と MFC
ref3::後藤さんのHP

既存のMFCコードにマネージコードを挿入する試み(ref1,ref2)を行い、
debugバージョンで見事成功で喜んでいると
releaseバージョンで不自然な動きをし始めた。
まず、デバッグなしで開始(Shift+F5)を行ったが
マウスイベントをまったくキャッチしてくれない。
ついでにデバッグしながら開始(F5)、
動きのあやしいイベントハンドラ(OnLMouseDown等)上のブレークポイントからコマ送りすると
新しく作られるオブジェクトが思っても見ないスタックにはいってる===!
コマ送りを解除すると作ったはずのオブジェクトが見当たらない。
わけが判らないので調べる(ref3)と、最適化されたソースがあやしいらしい。
そこで、プロジェクトのプロパティページで最適化を停止
(『構成プロパティ』⇒『C/C++』⇒『最適化』⇒『最適化』を無効(/Od))
すると、うまく動いた。
MFCはもう使わないほうがいいのか、Microsoftが.NET移行を強引に後押ししてるのか。

これで未練なくManagedに移れそう。

Friday, September 02, 2005

ブログの移行

メンテナンスを考えて、自サーバ以外にブログを持とうを思い移行した。