title: Expression Must Have Pointer-To-Struct-Or-Union Type
body: <p>I am passing dosHeader as a reference to the Test method, which should print out the ntHeader's signature. However, I am getting a compiler error under <code>*dosHeader-&gt;e_lfanew</code> - "expression must have pointer-to-struct-or-union type". I've tried casting it to (PIMAGE_DOS_HEADER*), which does remove the compiler error but doesn't work. What am I misunderstanding?</p>
  
  <pre><code>PIMAGE_NT_HEADERS ntHeader;    
  
  Test(PIMAGE_DOS_HEADER *dosHeader)
  {
      *dosHeader = (PIMAGE_DOS_HEADER)PEBytes;
      ntHeader = (PIMAGE_NT_HEADERS)((LONG)*dosHeader + *dosHeader-&gt;e_lfanew);
      printf("%d", ntHeader-&gt;Signature);
  }
  
  void main()
  {
      PIMAGE_DOS_HEADER dosHeader = 0;
      Test(&amp;dosHeader);
  }
  </code></pre>
  
  <p>Here is the structure definition</p>
  
  <pre><code>typedef struct _IMAGE_DOS_HEADER {      // DOS .EXE header
      WORD   e_magic;                     // Magic number
      WORD   e_cblp;                      // Bytes on last page of file
      WORD   e_cp;                        // Pages in file
      WORD   e_crlc;                      // Relocations
      WORD   e_cparhdr;                   // Size of header in paragraphs
      WORD   e_minalloc;                  // Minimum extra paragraphs needed
      WORD   e_maxalloc;                  // Maximum extra paragraphs needed
      WORD   e_ss;                        // Initial (relative) SS value
      WORD   e_sp;                        // Initial SP value
      WORD   e_csum;                      // Checksum
      WORD   e_ip;                        // Initial IP value
      WORD   e_cs;                        // Initial (relative) CS value
      WORD   e_lfarlc;                    // File address of relocation table
      WORD   e_ovno;                      // Overlay number
      WORD   e_res[4];                    // Reserved words
      WORD   e_oemid;                     // OEM identifier (for e_oeminfo)
      WORD   e_oeminfo;                   // OEM information; e_oemid specific
      WORD   e_res2[10];                  // Reserved words
      LONG   e_lfanew;                    // File address of new exe header
    } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
  </code></pre>