◀ANSI版開発トップへ
  • 4111 PODの継承について
    • 4115 Re:PODの継承について
      • 4119 Re2:PODの継承について
  • [4111] PODの継承について もか 2005年11月11日 22:55

    >struct OPENFILENAMEZ : public OPENFILENAME {
    > void * pvReserved;
    > DWORD dwReserved;
    > DWORD FlagsEx;
    >};
    この記述は大抵のコンパイラで動作しそうですけど、どの程度信頼できるんでしょう。
    データ型・整合性(alignment)が同じなら規格上同じとみなせるのでしょうか?

    #C++の仕様がいまいち理解できていないので、思い切って聞いて見ます。
    #特に64ビット版が不安です。
    • [4115] Re:PODの継承について ryoji 2005年11月12日 02:29

      ▼ もかさん
      > この記述は大抵のコンパイラで動作しそうですけど、どの程度信頼できるんでしょう。
      > データ型・整合性(alignment)が同じなら規格上同じとみなせるのでしょうか?
      >
      > #C++の仕様がいまいち理解できていないので、思い切って聞いて見ます。
      > #特に64ビット版が不安です。

      ご指摘ありがとうございます。
      すいません、厳密なことは考えてませんでした。

      メモリ配置って C++ の規格外(実装依存)かな?でも、SDK のヘッダーファイルが利用可能なコンパイラだったら、VC と同じに配置するようになってるはず。
      また、派生クラスの配置についても Winodows 用コンパイラを使う限りにおいて VC との差異は考えなくてもいいような気がします。
      (でなきゃそのコンパイラは OLE/COM インターフェイス系の API をまともに扱えないんじゃないかしら?)

      64ビット版については、VS2005β2 に付属の CommDlg.h から辿ってみると構造体のパック方式を明示指定するのが正解かもしれません。

      #ifdef _WIN64
      #include <pshpack8.h>
      #else
      #include <pshpack1.h>
      #endif

      (OPENFILENAMEZ 宣言)

      #include <poppack.h>

      かなぁ?
      他コンパイラをあまり使ったことが無い、64ビット検証環境も無いので全部推測で、自信無しです。
      あとは詳しい方のフォローをお待ちします。m(__)m
      • [4119] Re2:PODの継承について ryoji 2005年11月12日 03:15

        > また、派生クラスの配置についても Winodows 用コンパイラを使う限りにおいて VC との差異は考えなくてもいいような気がします。
        > (でなきゃそのコンパイラは OLE/COM インターフェイス系の API をまともに扱えないんじゃないかしら?)
        もしかして OLE/COM で必要とされるメモリレイアウトの互換性は vtable だけ??