Отказ от ответственности: я только начинаю в C, так что, скорее всего, я упускаю что-то очевидное или не думаю, что правильно! :)
Как именно я бы использовал GDI + в чистом C?
Насколько я понимаю, в GDI + есть обернутые объекты, созданные для C ++, но под ним лежит плоский API, доступный через gdiplusflat.h
, дружественный для C заголовок.
Моя проблема в том, что когда я #include его, я получаю следующие ошибки:
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 динамически?