Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2011, 21:57   #1
malor
Форумчанин
 
Регистрация: 23.05.2007
Сообщений: 151
Вопрос Динамическая линковка GDI+: C2065: 'Bitmap' : undeclared identifier (и Image тоже)

Сделал в заголовочном файле объявления типов наподобие:
typedef long(__stdcall*GDIPLUSSTARTUP)(unsi gned long*, const GDIPLUS_STARTUP_INPUT*, void*);

В cpp-файле
GDIPLUSSTARTUP GdiplusStartup;
Также и по остальным функциям: GdiplusShutdown, GdipCreateBitmapFromHBITMAP etc.

Для компилятора типы Bitmap и Image неизвестны:
Цитата:
c:\createjpg\createjpg\savescreen.c pp(194) : error C2065: 'Bitmap' : undeclared identifier
c:\createjpg\createjpg\savescreen.c pp(194) : error C2065: 'bmp' : undeclared identifier
c:\createjpg\createjpg\savescreen.c pp(194) : error C2061: syntax error : identifier 'Bitmap'
c:\createjpg\createjpg\savescreen.c pp(195) : error C2065: 'Image' : undeclared identifier
c:\createjpg\createjpg\savescreen.c pp(195) : error C2065: 'img' : undeclared identifier
c:\createjpg\createjpg\savescreen.c pp(195) : error C2065: 'bmp' : undeclared identifier
c:\createjpg\createjpg\savescreen.c pp(195) : error C2227: left of '->GetThumbnailImage' must point to class/struct/union/generic type
type is ''unknown-type''
c:\createjpg\createjpg\savescreen.c pp(201) : error C2065: 'EncoderQuality' : undeclared identifier
c:\createjpg\createjpg\savescreen.c pp(208) : error C2065: 'bmp' : undeclared identifier
c:\createjpg\createjpg\savescreen.c pp(208) : error C2541: 'delete' : cannot delete objects that are not pointers
c:\createjpg\createjpg\savescreen.c pp(209) : error C2065: 'img' : undeclared identifier
c:\createjpg\createjpg\savescreen.c pp(209) : error C2541: 'delete' : cannot delete objects that are not pointers
Как их объявлять?

Код:
// Сохраннение в файл на диске в формате JPG
int SaveScreenShotJPG()
{
    int result = 0;

    //Остатки прошлого кода, когда GDI+ линковался статически
    //ULONG_PTR gdiplusToken;
    //GdiplusStartupInput gdiplusStartupInput;
    //GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

    // В ней мы вызываем LoadLibrary(...) и получаем адреса функций через GetProcAddress()
    InitDeinitGdiPlus(true);

    int Width, Height;
    HDC scrdc, memdc;
    HBITMAP membit;
    scrdc  = GetDC(0);
    Height = GetSystemMetrics(SM_CYSCREEN);
    Width  = GetSystemMetrics(SM_CXSCREEN);
    memdc  = CreateCompatibleDC(scrdc);
    membit = CreateCompatibleBitmap(scrdc, Width, Height);
    SelectObject(memdc, membit);
    BitBlt(memdc, 0, 0, Width, Height, scrdc, 0, 0, SRCCOPY);

    Bitmap *bmp = new Bitmap(membit, NULL);
    Image  *img = bmp->GetThumbnailImage(Width, Height);
    CLSID imgClsid;
    //EncoderParameters encoderParams;
    ENCODER_PARAMETERS encoderParams;
    int quality = 65;
    encoderParams.Count = 1;
    encoderParams.Parameter[0].Guid           = EncoderQuality;
    encoderParams.Parameter[0].Type           = 4;
    encoderParams.Parameter[0].NumberOfValues = 1;
    encoderParams.Parameter[0].Value          = &quality;
    //GetEncoderClsid(L"image/jpeg", &imgClsid);
    //result = img->Save(L"Z:\\ImageDesktop.jpeg", &imgClsid, &encoderParams);  

    delete bmp;
    delete img;

    //GdiplusShutdown(gdiplusToken);
    InitDeinitGdiPlus(false);

    DeleteObject(membit);
    DeleteObject(memdc);
    ReleaseDC(0, scrdc);

    return result;
}
Вложения
Тип файла: rar CreateJPG_0707.rar (21.1 Кб, 4 просмотров)
malor вне форума Ответить с цитированием
Старый 07.07.2011, 18:58   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

вот так
Gdiplus::Graphics
counter вне форума Ответить с цитированием
Старый 07.07.2011, 20:41   #3
malor
Форумчанин
 
Регистрация: 23.05.2007
Сообщений: 151
Вопрос

Если написать
GdiPlus::Bitmap *bmp = new Bitmap(membit, NULL);
GdiPlus::Image *img = bmp->GetThumbnailImage(Width, Height);


то выдаст:
error C2653: 'GdiPlus' : is not a class or namespace name

т.к. строка
using namespace Gdiplus;
закомменчена.
Раскомментировать?
malor вне форума Ответить с цитированием
Старый 07.07.2011, 21:20   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

C++ - язык РЕГИСТРОЗАВИСИМЫЙ... GdiPlus и Gdiplus - разные вещи
p51x вне форума Ответить с цитированием
Старый 07.07.2011, 21:40   #5
malor
Форумчанин
 
Регистрация: 23.05.2007
Сообщений: 151
Вопрос

На присвоения вида
Код:
if (((FARPROC&)GdipCreateHBITMAPFromBitmap = GetProcAddress((HMODULE)GdiPlusHandle, "GdipCreateHBITMAPFromBitmap")) == NULL) // (GDIPCREATEHBITMAPFROMBITMAP)
{
	FreeLibrary((HMODULE)GdiPlusHandle);
	return false;
}
идут error'ы:
Цитата:
error C2065: 'GdipCreateHBITMAPFromBitmap' : undeclared identifier
error C2065: 'GdipCreateBitmapFromHBITMAP' : undeclared identifier
error C2065: 'GdipGetImageEncodersSize' : undeclared identifier
................. etc ..........................
Хотя если встать, например, на GdipCreateHBITMAPFromBitmap и нажать "Go To Definition", то описание студия покажет:
Код:
GpStatus WINGDIPAPI
GdipCreateHBITMAPFromBitmap(GpBitmap* bitmap,
                            HBITMAP* hbmReturn,
                            ARGB background);
Почему?
malor вне форума Ответить с цитированием
Старый 07.07.2011, 22:46   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
т.к. строка
using namespace Gdiplus;
закомменчена.
Раскомментировать?
Сделали?..
p51x вне форума Ответить с цитированием
Старый 07.07.2011, 22:52   #7
malor
Форумчанин
 
Регистрация: 23.05.2007
Сообщений: 151
По умолчанию

Да, раскомментил.
malor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
undeclared identifier eatlant Общие вопросы Delphi 1 03.05.2011 23:12
'cout' : undeclared identifier Alt_Shift Помощь студентам 10 15.04.2011 07:54
Undeclared identifier: 'curCaps' xrenomx Общие вопросы Delphi 12 06.02.2011 18:20
Undeclared identifier. Neroaz Помощь студентам 4 07.04.2010 20:29
TIdMultiPartFormDataStream undeclared identifier celovec Работа с сетью в Delphi 15 08.08.2007 14:03