昨日から、久しぶりにWindowsGUIの仕事に復帰。ずいぶん前に作ったVisual C++ 6.0で作ったプロジェクトをDatabase対応にしてやるって言う、むちゃくちゃめんどくさい仕事。
当然(なのか?)、今は、開発環境をVisual C++ .NET 2003にしてるんで、こいつで作ったプロジェクトから、使えそうな部分をバックポートして、なるだけ工数を減らそうと画策してたんだけど、そのとき初めて知ったことがひとつ。
.NET 2003 で、普通に使ってたこんなコードを持ってきたら、 変換できねーぜって言う感じのエラーがでて、全然先に進まず。
typedef struct { CString& s; LPTSTR p; } PRARAM_REC; void func(void) { CString str; TCHAR txt[32]; ... PARAM_REC T[] = { {str, txt}, }; func_XX(T); }
今まで、きちんと動いていたコードを持ってきたんで、何が悪いんだかさっぱりわかんなくて、ここで30分ぐらい悩む羽目になりました。
いろいろいじってみた結果、VC6では、こんな感じにしてやらんと、動かないことが判明。
typedef struct { CString* s; ← ここと LPTSTR p; } PRARAM_REC; void func(void) { CString str; TCHAR txt[32]; ... PARAM_REC T[] = { {&str, txt}, ← ここ }; func_XX(T); }
参照型は便利だぜーって思って使いまくってたんだけど、.NETから使えるようになった機能だったてのは、初めて知ったな。
ん、てことは、Visual Studio 2008なんかだと、もっと便利になってるのかもしれないね。
ホントは、2005についてるUnicodeに対応したリソースエディタだけ使えりゃほかの部分は、2003と同等の機能でいいんだよな。つーか、開発環境更新すると、プロジェクトの再検証をしないといけなくなるから、リソースエディタだけ更新したいぞ。無理だよねえorz
開発環境を変えるとプロジェクトの再検証どころか共存できないから<br>実行環境ももう1ついるかも<br>2008のbeta版を入手して確かめるんだ。
いや、betaじゃなくてもいいだろ。<br>それじゃ、納品できんじゃん。
ほんと微妙な差なんすね・・・
見た目微妙かも知れんけど、内部的にはどうなんだろうねえ。<br>あんま変わらんかも知れん(^_^;)