Отказ от ответственности: я только начинаю работать на C, так что, вероятно, я пропущу что-то очевидное или не думаю правильно!:)
Как я могу использовать GDI + в чистом C?
Как я понимаю, GDI + обернул объекты, сделанные для С++, но под ним лежит плоский API, доступный через gdiplusflat.h
, C-дружественный заголовок.
Моя проблема в том, что когда я # включил его, я получаю следующие ошибки:
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\gdiplusflat.h(30) : error C2143: syntax error : missing '{' before '__stdcall'
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\gdiplusflat.h(31) : error C2146: syntax error : missing ')' before identifier 'brushMode'
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\gdiplusflat.h(31) : error C2061: syntax error : identifier 'brushMode'
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\gdiplusflat.h(31) : error C2059: syntax error : ';'
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\gdiplusflat.h(31) : error C2059: syntax error : ','
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\gdiplusflat.h(31) : error C2059: syntax error : ')'
and 100 more...
Теперь, я думаю, эти ошибки обусловлены тем, что GpStatus
не определяется, потому что просмотр в gdiplusflat.h
показывает, что все функции имеют стиль:
// WINGDIAPI is #defined as __stdcall
GpStatus WINGDIPAPI
GdipCreatePath(GpFillMode brushMode, GpPath **path);
GpStatus WINGDIPAPI
GdipCreatePath2(GDIPCONST GpPointF*, GDIPCONST BYTE*, INT, GpFillMode,
GpPath **path);
GpStatus WINGDIPAPI
GdipCreatePath2I(GDIPCONST GpPoint*, GDIPCONST BYTE*, INT, GpFillMode,
GpPath **path);
etc...
Проблема заключается в том, что GpStatus
является typedef для Status
в GdiPlusGpStubs.h
(заголовок С++), а Status
сам является перечислением, определенным в GdiPlusTypes.h
(также заголовке С++). Я пробовал самостоятельно определять enum, но по какой-то причине компилятор не принял его!
Итак... как точно использовать функции GDI + в C? Должен ли я просто загружать gdiplus.dll динамически?