Visual C++ 2005 ではP/Invokeなんていらない?
Managed C++,C#,VB.NETからWindows APIを呼び出すには、P/Invokeおよび、COM経由で呼び出す必要があります。そして、その際に引数で構造体が必要な場合、マーシャリング(Marshaling)して渡すという手順が必要でした。慣れればいいのですが、最初はどうしてもつまづくところでもあります。自分で作ったDLLではあきらめもつきますが、Windows APIでもやらなくてはならないのかと思うと、ぞっとします。
参考:C++ マネージ拡張とデータ マーシャリングのチュートリアル(Visual C++ 2003)。
ところが、Visual Studio 2005のC++ではもっと簡単になっています。
参考:How to: Marshal Structures Using C++ Interop(Visual C++ 2005)
例を見るとコードがぐっと減っています。必要なところのみ#unmanaged宣言を入れるだけ。これならば間違うこともほぼないでしょう。さらには、Windows APIのヘッダファイルでは定義されているので、includeを追加するだけで、自分でmarshalを宣言しなくてもよいそうです。
参考:P/Invoke?No Way!
これだけ見ても、Visual Studio 2005のC++/CLIは既存コードとの連携が可能な限り簡単に使えるように設計していると思えます。私の場合、作りたい物のコード中にWidows APIの占める割合が結構多いので助かります。この機能一つだけみても、Managed C++も捨てたもんじゃないですね。2003ではC++/CLIに挫折したのですが、2005では既存コードの移行を検討するときにでも使ってみようかなと思います。