2010-01-09 16 views

Antwort

14

Sie können diese offsetof mit tun:

#define start_add(ptr1, type1, member1) ((type1 *)((char *)(ptr1) - offsetof(type1, member1))) 
+2

Ich glaube, dass Sie eine zusätzliche '&' 'vor (ptr1)'. 'ptr1' ist die Adresse des Mitglieds bereits. –

+0

Ganz richtig, behoben. –

+0

Sie sollten auch einen zusätzlichen Satz von Klammern um das gesamte Makro-Ergebnis hinzufügen - denken Sie daran, dass '->' eine höhere Priorität hat als '(Typ)'. Wenn Sie '->' auf das Ergebnis anwenden möchten, benötigen Sie sie. – caf

1

diese aus den Fenstern wdk

/* 
#define CONTAINING_RECORD(address, type, field) ((type *)(\ 
     (PCHAR)(address) - \ 
     (ULONG_PTR)(&((type *)0)->field))) 
*/ 
Verwandte Themen