質問: pWebBrowser2->get_ReadyState(&rs); cout << rs << endl; SysFreeString(bstrUrl); pWebBrowser2->Release(); CoUninitialize(); } ``` IEで Google を開くだけの簡素なプログラムです。 エラーもなく、期待通りに動作しています。 ### 質問内容 IWebBrowser2 のメソッド、プロパティは exdisp.h で宣言されており、 上記コードのうち、get_ReadyState はアクティブなプリプロセッサディレクティブで、 put_Visible, Navigate, Release の3つは非アクティブなプリプロセッサディレクティブとなっておりました。 (一連の #if/#else のコードブロックにそれぞれ記載されていました) 一連の #if,#elif,#else,#endif ディレクティブでは、 いずれか一つのコードブロックのみがプリプロセッサに解釈されるという認識です。 なぜ、非アクティブとなったコードブロックに記載されたメソッド、プロパティが利用できるのでしょうか。
回答: > > 上記コードのうち、get_ReadyState はアクティブなプリプロセッサディレクティブで、 > > put_Visible, Navigate, Release の3つは非アクティブなプリプロセッサディレクティブとなっておりました。 > > > その事実が読み取れません。いずれも`#if defined(__cplusplus) && !defined(CINTERFACE)`の場合に定義されるメソッドです。