VC++6.0 から VC++.NET への移行について。
従来バージョンとの互換性は高いと唱っているMSですが、はっきりいって互換性はない。Visual Studio の 6 以前のバージョンと.NET 以降の話ですがね。
まず、C++の標準ライブラリ、あるいはランタイムライブラリが従来通りの使い方で使えない。sprintf なんてよく使う標準関数でさえ、外部シンボルが未解決とかいうエラーでリンクエラーになる。これは VC++ がより C++ 標準(ANSI)に近くなったという話ですが、これは今まで VC++ でつくった資産がそのまま使えなくなったということ。
あと、ガベージコレクションでメモリ管理を自動化されたおかげで、従来のメモリ操作ができなくなってる。メモリリークのリスクはなくなったけど、その分、メモリのアドレスを指定したデータ交換やポインタ移動みたいなことができない。(やりようはあるらしいけど、.NET 本来の使い方ではないので推奨はされていない)
今までの C++ をそのまま書けるのは書けるんです。でも、そうしてつくったプログラムは、.NETの新しい環境で利用できない。どういうことかというと、.NET Frameworkというのが今後の主流になるらしいですが、その環境から、例えば C++ 標準ライブラリで作った関数とかクラスがそのまんまじゃ使えない。マネージドクラスというやつでラップしてやる必要があると。
まあ、私がまだよく理解してないだけでしょうけど。簡単に移行できると思っていたら、そう簡単にいくものではなかったということですね。
とりあえず、今は VC++ 6.0 で作ったスタティックライブラリを .NET のクラスライブラリ化しようと頑張ってます。
ネットワーク系はまるっと新しい部品に置き換えれば良さそうだけど、メモリ管理とスレッド系は古いコードを活かしたい。しかしこれは厄介そう。