Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не подключается библитотека 
V
    Опции темы
IIGGOORR
Дата 26.4.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



Извините за беспокойство. У меня такая проблема - Я создаю простое MFC приложение, мне надо загружать в нём bmp картинки и обрабатывать их. Мне нужны методы класса Image, соответственно они содержатся в библиотеках gdiplus.dll, gdiplus.lib. Когда я подключаю с помощью #include <...> заголовочные файлы из класса Image, например, Gdiplusheaders.h, gdiplus.h, то компилятор выдаёт  много ошибок. Когда я пишу стандартный конструктор класса Image компилятор сообщает, что такого класса нет. Помогите пожалуйста, как подключить библиотеки класса Image?
PM MAIL   Вверх
_hunter
Дата 26.4.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



Цитата(IIGGOORR @  26.4.2007,  13:33 Найти цитируемый пост)
 то компилятор выдаёт  много ошибок

их не помешало бы привести...

Цитата(IIGGOORR @  26.4.2007,  13:33 Найти цитируемый пост)
 Мне нужны методы класса Image, соответственно они содержатся в библиотеках gdiplus.dll, gdiplus.lib. 

что за класс такой? CImage в atlimage.h описан...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
korbian
Дата 26.4.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 1
Всего: 14



Если я все правильно понял, то
#pragma comment( lib, "gdiplus.lib" )
или (для Visual Studio) project->properties->linker->input->additional dependencies: gdiplus.lib



--------------------
korbian ©
PM   Вверх
IIGGOORR
Дата 26.4.2007, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



Спасибо за ответ. Не помогло, ошибки следующие:

Код

void CSecondDlg::OnBnClickedOk()
{
    // TODO: Add your control notification handler code here
    Bitmap::Bitmap( m_initial_path, FALSE ) *pBitmap = new Bitmap::Bitmap();

    OnOK();
}


Error    1    error C2653: 'Bitmap' : is not a class or namespace name
Error    2    error C2065: 'pBitmap' : undeclared identifier
Error    3    error C3861: 'Bitmap': identifier not found
Error    4    error C2061: syntax error : identifier '{ctor}'
PM MAIL   Вверх
Earnest
Дата 26.4.2007, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Очевидно, компилятор не находит объявлений. Т.е. не подключен соответствующий хедер. Какой, сказать не могу, т.к. GDI+ не использую, но, если не найдешь в документации, можно, на худой конец, файловым поиском найти, где это все определяется. И еще, обрати внимание на пространство имен, возможно просто некорректно его указываешь.


--------------------
...
PM   Вверх
IIGGOORR
Дата 26.4.2007, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



Earnest спасибо за советы.

Цитата

Очевидно, компилятор не находит объявлений. Т.е. не подключен соответствующий хедер.


В том то и дело, когда подключаю соответствующие хедеры, компилятор выдаёт ошибку в каждой строчке этого хедера.

Цитата

И еще, обрати внимание на пространство имен, возможно просто некорректно его указываешь.


А что значит некорректно указывать пространство времён и где оно вообще указывается?

Благодарен за помощь.
PM MAIL   Вверх
Earnest
Дата 26.4.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(IIGGOORR @  26.4.2007,  21:52 Найти цитируемый пост)
В том то и дело, когда подключаю соответствующие хедеры, компилятор выдаёт ошибку в каждой строчке этого хедера.

Какой хедер и какие ошибки?

Лучше всего, конечно, найти пример использования GDI+ (причем любого) и списать слова. Может, там какой-то порядок подключаемых хедоров нужен.

Цитата(IIGGOORR @  26.4.2007,  21:52 Найти цитируемый пост)
А что значит некорректно указывать пространство времён и где оно вообще указывается?

Ну например, у тебя (т.е. в стандартном хедере), есть такое объявление:
Код

namespace XXX
{
   ...

   class YYY { ... };
}


Ты подключаешь это хедер и пытаешься использовать символ YYY, на что компилятор ругается, т.к. ты должен писать XXX::YYY.

Кстати, твой код:
Код

   Bitmap::Bitmap( m_initial_path, FALSE ) *pBitmap = new Bitmap::Bitmap();
Выглядит совершенно безумно: не только у компилятора, у меня тоже крыша едет.
Но, поскольку я умнее компилятора smile, то могу предположить, что ты имел в виду следующее:
Код

   Bitmap* pBitmap = new Bitmap (m_initial_path, FALSE ); 


Только нужно писать не просто Bitmap, XXX::Bitmap, где XXX - то пространство имен, где класс Bitmap объявлен.

И наконец: что-то про GDI+ было на форуме. Поищи, может найдешь примеры. И книжку какую-нибудь про С++ прочитай, азы хотя бы...


--------------------
...
PM   Вверх
Greeen
Дата 27.4.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: 10
Всего: 18



Вот тебе листинг файлега, подключаешь его инклудом и юзай GDI+ без проблем
Код

#ifndef _GDIPLUSH_H_INCLUDED_
#define _GDIPLUSH_H_INCLUDED_

// 
// GDI+ helper file v1.0
// 
// Written by Zoltan Csizmadia ([email protected])
// 

// GDIPLUS_NO_AUTO_INIT:
// GDI+ won't be initialized at program startup, 
// you have to create GdiPlus::GdiPlusInitialize object to 
// initialize GDI+ ( GDI+ will be uninitialized, when destructor
// is called.
//#define GDIPLUS_NO_AUTO_INIT

// GDIPLUS_USE_GDIPLUS_MEM:
// GdipAlloc and GdipFree is used for memory operations
// In this case _Crt functions cannot be used to detect 
// memory leaks
//#define GDIPLUS_USE_GDIPLUS_MEM

// GDIPLUS_NO_AUTO_NAMESPACE:
// Gdiplus namespace wont' be defined as a used namespace
// In this case you have to use Gdiplus:: prefix
//#define GDIPLUS_NO_AUTO_NAMESPACE

#ifdef _GDIPLUS_H
#error Gdiplus.h is already included. You have to include this file instead.
#endif

// Fix for STL iterator problem
#define iterator _iterator
#define list _list
#define map _map

#define _GDIPLUSBASE_H

namespace Gdiplus
{
    namespace DllExports
    {
        #include "GdiplusMem.h"
    };

    class GdiplusBase
    {
    public:
#ifdef _DEBUG
        static void* __cdecl GdiplusAlloc( size_t nSize, LPCSTR szFileName, int nLine )
        {
#ifdef GDIPLUS_USE_GDIPLUS_MEM
            UNREFERENCED_PARAMETER(szFileName);
            UNREFERENCED_PARAMETER(nLine);
            return DllExports::GdipAlloc(nSize); 
#else
            return ::operator new( nSize, szFileName, nLine );
#endif
        }

        static void GdiplusFree( void* pVoid, LPCSTR szFileName, int nLine )
        {
#ifdef GDIPLUS_USE_GDIPLUS_MEM
            UNREFERENCED_PARAMETER(szFileName);
            UNREFERENCED_PARAMETER(nLine);
            DllExports::GdipFree(pVoid); 
#else
            ::operator delete( pVoid, szFileName, nLine );
#endif
        }
        
        void* (operator new)(size_t nSize) 
        { 
            return GdiplusAlloc( nSize, __FILE__, __LINE__ );
        }
        void* (operator new[])(size_t nSize) 
        { 
            return GdiplusAlloc( nSize, __FILE__, __LINE__ );
        }
        void * (operator new)(size_t nSize, LPCSTR lpszFileName, int nLine) 
        { 
            return GdiplusAlloc( nSize, lpszFileName, nLine );
        }
        void (operator delete)(void* pVoid) 
        { 
            GdiplusFree( pVoid, __FILE__, __LINE__ );
        }
        void (operator delete[])(void* pVoid) 
        { 
            GdiplusFree( pVoid, __FILE__, __LINE__ );
        }
        void operator delete(void* pVoid, LPCSTR lpszFileName, int nLine) 
        { 
            GdiplusFree( pVoid, lpszFileName, nLine);
        }
#else // _DEBUG

        static void* __cdecl GdiplusAlloc( size_t nSize )
        {
#ifdef GDIPLUS_USE_GDIPLUS_MEM
            return DllExports::GdipAlloc(nSize); 
#else
            return ::operator new(nSize);
#endif
        }

        static void GdiplusFree( void* pVoid )
        {
#ifdef GDIPLUS_USE_GDIPLUS_MEM
            DllExports::GdipFree(pVoid); 
#else
            ::operator delete( pVoid );
#endif
        }

        void* (operator new)(size_t nSize) 
        { 
            return GdiplusAlloc( nSize );
        }
        void* (operator new[])(size_t nSize) 
        { 
            return GdiplusAlloc( nSize );
        }
        void (operator delete)(void* pVoid) 
        { 
            GdiplusFree( pVoid );
        }
        void (operator delete[])(void* pVoid) 
        { 
            GdiplusFree( pVoid );
        }
#endif
    };
};

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

#include <Gdiplus.h> 

#ifdef _DEBUG
#undef new
#endif

#pragma comment (lib, "Gdiplus.lib")

namespace Gdiplus
{
    class GdiPlusInitialize
    {
    public:
        GdiPlusInitialize()
        {
            GdiplusStartupInput Startup;
            GdiplusStartup( &m_Token, &Startup, NULL );
        }

        ~GdiPlusInitialize()
        {
            GdiplusShutdown( m_Token );
        }

    protected:
        ULONG_PTR m_Token;
#ifndef GDIPLUS_NO_AUTO_INIT
        static GdiPlusInitialize m_Initialize;
#endif
    };
#ifndef GDIPLUS_NO_AUTO_INIT
    GdiPlusInitialize GdiPlusInitialize::m_Initialize;
#endif
}

#ifndef GDIPLUS_NO_AUTO_NAMESPACE
using namespace Gdiplus;
#endif

// STL problem
#undef iterator
#undef list
#undef map

#endif



--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
IIGGOORR
Дата 27.4.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



Спасибо за дельные советы.

Earnest 

коструктор:
 
Код

const WCHAR *filename;
    BOOL useIcm;

    filename = m_initial_path;
    useIcm = TRUE;

    Bitmap::Bitmap( *filename, useIcm ) *pBitmap = new Bitmap::Bitmap();


взял из MSDN.
Цитата

Какой хедер и какие ошибки?

Хедер: Gdiplusheaders.h, ошибки исчезли с подключенным файлом от Greeen'a


Greeen

Ваш файл подключил. Первые две ошибки исчезли, а именно:
Цитата

Error    1    error C2653: 'Bitmap' : is not a class or namespace name
Error    3    error C3861: 'Bitmap': identifier not found


т. е., я как понимаю, библиотека всё таки подключиласьsmile, но остались две ошибки:

Цитата

Error    1    error C2065: 'pBitmap' : undeclared identifier
Error    2    error C2061: syntax error : identifier '{ctor}'


Видимо я всё-таки неправильно делаю коструктор, хотя в  MSDN"е он присутствует, либо в опциях линковщика, что-то не то ставлю:

Цитата

Runtime library                            Multi-threaded (/MT)
Enable Incremental Linking         Yes (/INCREMENTAL)
Link Library Dependencies          Yes
Use Library Dependeny Inputs   Yes


Какие опции вообще влияют на подключение библиотек?

Заранее спасибо за ответы.
PM MAIL   Вверх
Greeen
Дата 27.4.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: 10
Всего: 18



Опции линковщика и компилятора тут не при чем. Давай приводи свой код потому, что ругается на то, что нет объявления pBitmap. Может ты просто забыл чего то. Короче код в студию.

Только что заметил. Вот этот твой код
Код
Bitmap::Bitmap( *filename, useIcm ) *pBitmap = new Bitmap::Bitmap();
мягко говоря никуда не годится. Поэтому, соглашаясь с Earnest (и не соглашаясь с компилятором  smile ), предполагаю что тебе нужно следующее:
Код

Bitmap* pBitmap = new Bitmap(m_initial_path, FALSE);


Это сообщение отредактировал(а) Greeen - 27.4.2007, 15:07


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
IIGGOORR
Дата 27.4.2007, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



GreeenEarnest, Огромное спасибо за вашу помощь. Действительно мой конструктор не работал, ваш - работает, но честное слово 
Код

Bitmap::Bitmap( *filename, useIcm ) *pBitmap = new Bitmap::Bitmap();

не я придумал, как в MSDN"е написано, так и писал.
Цитата

Bitmap::Bitmap Constructor

--------------------------------------------------------------------------------

Creates a Bitmap object based on an image file.

Syntax

Bitmap(          const WCHAR *filename,
    BOOL useIcm
);
Parameters

filename
[in] Pointer to a null-terminated string that specifies the path name of the image file. The graphics file formats supported by GDI+ are BMP, GIF, JPEG, PNG, TIFF, Exif, WMF, and EMF. 
useIcm
[in] Optional. Boolean value that specifies whether the new Bitmap object applies color correction according to color management information that is embedded in the image file. Embedded information can include International Color Consortium (ICC) profiles, gamma values, and chromaticity information. TRUE specifies that color correction is enabled, and FALSE specifies that color correction is not enabled. The default value is FALSE. 
Return Value

No return value.



Это сообщение отредактировал(а) IIGGOORR - 27.4.2007, 22:31
PM MAIL   Вверх
Earnest
Дата 28.4.2007, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(IIGGOORR @  27.4.2007,  21:51 Найти цитируемый пост)
не я придумал, как в MSDN"е написано, так и писал.

Из приведенной цитаты вовсе не следует такая запись как ты сочинил, а следует ровно то, что мы с грином написали.
Я уже вроде говорили и еще раз повторю: изучай матчасть, т.е. C++. В документации предполагается, что ты знаешь, как надо вызывать конструктор.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1100 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.