Если не определено макроопределение _FAR_NO_NAMELESS_UNIONS, структура
FarDialogItem имеет вид, совместимый с FAR 1.65 и FAR 1.70
beta 3 и более ранними. При этом структура
FarDialogItem
будет иметь следующий вид:
struct FarDialogItem
{
...
union {
int Selected;
char *History;
char *Mask;
struct FarList *ListItems;
CHAR_INFO *VBuf;
};
...
union {
char Data[512];
struct {
DWORD PtrFlags;
int PtrLength;
char *PtrData;
char PtrTail[1];
} Ptr;
};
};
Таким образом, для обращения, например, к полю Data
структуры FarDialogItem
достаточно будет писать Data, а к полю Selected
- Selected.
Если определено макроопределение _FAR_NO_NAMELESS_UNIONS, в структуре будут использоваться именованные объединения. При этом структура будет совместима с компиляторами ANSI C, но не будет совместима на уровне исходных текстов с плагинами, написанными для FAR 1.65. Структура будет иметь следующий вид:
struct FarDialogItem
{
...
union {
int Selected;
char *History;
char *Mask;
struct FarList *ListItems;
CHAR_INFO *VBuf;
} Param;
...
union {
char Data[512];
struct {
DWORD PtrFlags;
int PtrLength;
char *PtrData;
char PtrTail[1];
} Ptr;
} Data;
};
В этом случае для обращения, например, к полю Data структуры
необходимо будет писать Data.Data, а к полю Selected
- Param.Selected.
То или иное макроопределение должна быть объявлено перед
директивой #include "plugin.hpp":
#define _FAR_NO_NAMELESS_UNIONS #include "plugin.hpp"
Внимание!