-#define TABLE_FIND(TABLE, TYPE, FIELD, NAME) \
- table_find((void *)TABLE, \
- offsetof(TYPE, FIELD), \
- sizeof (TYPE), \
- sizeof TABLE / sizeof (TYPE), \
+#include <stddef.h>
+
+#if _WIN32
+#define OFFSETOF_IN_OBJECT(OBJECT,FIELD) ((char *)&(OBJECT).FIELD - (char *)&(OBJECT))
+#else
+#define OFFSETOF_IN_OBJECT(OBJECT,FIELD) offsetof(typeof(OBJECT),FIELD)
+#endif
+
+#define TABLE_FIND(TABLE, FIELD, NAME) \
+ table_find((void *)TABLE, \
+ OFFSETOF_IN_OBJECT(TABLE[0], FIELD), \
+ sizeof ((TABLE)[0]), \
+ sizeof TABLE / sizeof ((TABLE)[0]), \