Заявление об ограничении ответственности: я только начинаю работать с C, поэтому вполне вероятно, что я упускаю что-то очевидное или думаю неправильно! :)
Как именно я буду использовать GDI + в чистом C?
Насколько я понимаю, GDI + имеет обернутые объекты, созданные для C ++, но под ним лежит плоский 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
(заголовок C ++) и Status
само по себе является перечислением, определенным в GdiPlusTypes.h
(также заголовок C ++). Я сам пытался определить перечисление, но по какой-то причине компилятор его не принял!
Итак ... как точно использовать функции GDI + в C? Следует ли мне просто динамически загружать gdiplus.dll?