gdiplus.hをインクルードするとコンパイルできないとき

結論→先に、#include
IStreamが定義されていないとか、関数の戻り値の型が無いなどといわれます。

#include <windows.h>
#include <gdiplus.h>
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT iCmdShow)
{
        return 0;
}

上記のようなコードではコンパイルが通ります。
しかしVC++EEの空じゃないプロジェクト(元から色々書かれているやつ)では、
gdiplus.hをインクルードしただけで、GDI+関係のヘッダからかなりのエラーがでます。
調べてみたら海外の質問サイトに漂流。
http://social.msdn.microsoft.com/forums/en-US/Vsexpressvc/thread/55e02319-43b7-4ff1-b8c0-250e2e268c70/

#include <objbase.h>

 This header is included by a lot of stuff, such as the DirectX libs, 
and eventually includes the necessary stuff. This should be considered a bug I think. 
The <gdiplus.h> lib should include it itself.

(このヘッダは、DirectXとかいろんなのからインクルードされるし、結局は必要なもの。
これはよく検討すべき問題だと思う。gdiplus.hも自分でこれをインクルードするべきだ。)

#include <objbase.h>
#include <gdiplus.h>

と書けば確かにコンパイルが通りました。
だけど空のプロジェクトではこんなものをインクルードする必要がなかったのにどうして、
と思ったら、空じゃないプロジェクトでも、stdafx.hの先頭

#include <windows.h>
#include <gdiplus.h>

と書けば、objbase.hをインクルードする必要は無いようです。
原因はおそらく、gdiplus.hよりも前にインクルードしたヘッダが変なマクロを定義したせいで、
gdiplus.hがobjbase.hをインクルードしなかった、
ということでしょうか。ちょっと調べただけじゃわかりそうにありません。

どうでもいいけど質問者返事してない・・・。

追記

上記の質問サイトの最後にも書いてありますが、無視してました。
stdafx.hに

// Windows ヘッダーから使用されていない部分を除外します。
#define WIN32_LEAN_AND_MEAN
#include <windows.h>

と書かれていたのが問題のようです。
これがなければobjbase.hをわざわざインクルードする必要はありません。
また、これがあってもobjbase.hをインクルードすればコンパイルできます。
多分謎が解けました。