вперед объявить typedef'd struct - PullRequest
4 голосов
/ 12 марта 2010

Я не могу понять, как переслать объявление структуры Windows. Определение

typedef struct _CONTEXT
{
 ....
} CONTEXT, *PCONTEXT

Я действительно не хочу вставлять в этот заголовок, так как он включается везде.

Я пробовал

struct CONTEXT

и

struct _CONTEXT

без удачи (переопределение основных типов с помощью структуры actall в winnt.h.

Ответы [ 2 ]

9 голосов
/ 12 марта 2010
extern "C" { typedef struct _CONTEXT CONTEXT, *PCONTEXT; }

Вы должны объявить, что _CONTEXT является struct. И объявите его как extern "C", чтобы соответствовать внешнему связыванию windows.h (который является заголовком C).

Однако вам не нужно предоставлять определение для typedef, но если вы это сделаете, все определения должны совпадать ( Правило одного определения ).

РЕДАКТИРОВАТЬ: я также забыл внешний "C".

1 голос
/ 12 марта 2010

Не решение, а обходной путь:

// h-file
struct MyContext; // forward decl
void f(MyContext * pContext); // use pointer


//cpp-file
#include <windows.h>
struct MyContext {
   CONTEXT cont;
};

void f(MyContext * pContext)
{
   CONTEXT * p_win_cont = & pContext->cont;
   // use p_win_cont
   // ....
}
...