вперед объявить структуру typedef

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

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

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

я пробовал

структура КОНТЕКСТ

и

структура _CONTEXT

безуспешно (переопределение базовых типов с фактической структурой в winnt.h.


person Steve    schedule 12.03.2010    source источник
comment
Вы должны опубликовать именно то, что вы пробовали. struct _CONTEXT; не должен вызывать ошибки, но сам по себе он не очень полезен.   -  person Michael Burr    schedule 12.03.2010


Ответы (2)


extern "C" { typedef struct _CONTEXT CONTEXT, *PCONTEXT; }

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

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

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

person MSN    schedule 12.03.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
   // ....
}
person Alexey Malistov    schedule 12.03.2010