Ответ 1
Проблема в том, что gdiplusflat.h действительно требуется гораздо больше gdi *.h заголовочных файлов, которые были включены до него. Но многие из этих файлов заголовков, которые имеют необходимые объявления typedef, на которые ссылается gdiplusflat.h, также содержат объявления "class" и другие ключевые слова С++. Компилятор C будет выходить из строя, когда видит эти строки.
У вас есть два варианта.
-
Простой. Примите тот факт, что С++ по существу является надмножеством C. Затем просто переименуйте свой ".c" файл, который вы пытаетесь скомпилировать, чтобы иметь расширение ".cpp". Ваш код C будет скомпилирован как С++, но, скорее всего, он не изменит строку кода, который вы пишете. Затем #include gdiplus.h перед вами #include gdiplusflat.h
-
Harder. зависит от определений typedef в других файлах заголовков. Проблема в том, что многие из этих заголовочных файлов имеют определения класса и ключевые слова С++, которые компилятор C будет выходить из строя. Вам придется вручную переносить многие объявления C в свой собственный заголовочный файл, который включается перед gdiplusflat.h. Вот моя слабая попытка. Это не совсем так. Он получает половину ошибок компиляции. Но я слишком устал и просто пошел с вариантом №1. Вы можете закончить его, но вариант 1 выше намного проще.
х
enum Status
{
Ok = 0,
GenericError = 1,
InvalidParameter = 2,
OutOfMemory = 3,
ObjectBusy = 4,
InsufficientBuffer = 5,
NotImplemented = 6,
Win32Error = 7,
WrongState = 8,
Aborted = 9,
FileNotFound = 10,
ValueOverflow = 11,
AccessDenied = 12,
UnknownImageFormat = 13,
FontFamilyNotFound = 14,
FontStyleNotFound = 15,
NotTrueTypeFont = 16,
UnsupportedGdiplusVersion = 17,
GdiplusNotInitialized = 18,
PropertyNotFound = 19,
PropertyNotSupported = 20,
#if (GDIPVER >= 0x0110)
ProfileNotFound = 21,
#endif //(GDIPVER >= 0x0110)
};
typedef Status GpStatus;
enum FillMode
{
FillModeAlternate, // 0
FillModeWinding // 1
};
typedef FillMode GpFillMode;
struct GpPath {};
typedef float REAL;
struct GpPointF
{
REAL x;
REAL y;
};
struct GpPoint
{
int x;
int y;
};
#include <gdiplusflat.h>