Strona główna C++ C++ Hardware HTML i javascript Java Software SQL

C++ - GDI+ kompilownie przykładów Microsoft i najczęstsze problemy.

Dodano: 2012-01-10

Windows GDI+ jest bardzo przydatną biblioteką dla programistów języka C/C++ pracujących w środowisku Visual Studio. Oferowane przez nie możliwości są wystarczające do stworzenia użytecznej aplikacji konwertującej proste typu obrazów na inny format jak i zmianę ich poziomu kompresji (dotyczy to głównie jpeg).

Na stronie Microsoftu można znaleźć przykłady użycia jak i opis biblioteki GDI+

Próbują skompilować przykłady ze strony Microsoft napotkacie na kilka problemów:

  • error LNK2019: unresolved external symbol "int __cdecl GetEncoderClsid(wchar_t const *,struct _GUID *)" (?GetEncoderClsid@@YAHPB_WPAU_GUID@@@Z) referenced in function _main

    Problem ten wynika z potrzeby zaimplementowania metody GetEncoderClsid(), przykładowa kodowanie powinno wyglądać tak (trochę mojej modyfikacji istniejącego kodu w sieci):

    int GetEncoderClsid(const WCHAR* format, CLSID* pClsid){
    	 UINT num = 0; 
    	 UINT size = 0; 
    
    	 GetImageEncodersSize(&num, &size);
    	 if(size == 0)
    		return -1; 
    
    	 ImageCodecInfo* pICI = new ImageCodecInfo[size];
    	 if(!pICI)
    		return -1;
    
    	 GetImageEncoders(num, size, pICI);
    
    	 for(UINT j=0; j<num; ++j)
    		if(wcscmp(pICI[j].MimeType, format) == 0){
    			*pClsid = pICI[j].Clsid;
    
    			delete[] pICI;
    			return j;
    		} 
    	 
    
    	 delete[] pICI;
    	 return -1;
     }
  • error LNK2019: unresolved external symbol _GdipDisposeImage@4 referenced in function "public: virtual __thiscall Gdiplus::Image::~Image(void)" (??1Image@Gdiplus@@UAE@XZ)

    Błąd ten można w łatwy sposób naprawić dodając bibliotekę statyczną #pragma comment(lib, "gdiplus.lib")

Po wykonaniu powyższych kroków, kompilacja kodów przykładowych ze strony Microsoft powinna przebiec bez problemu ;)