Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Ошибка линкера. Помогите!!!


Автор: alrud 20.4.2008, 14:45
Пытаюсь написать свой COM-объект, который будет работать с GDI+ (загружать картинки из памяти).  Когда GDI+ вызывает функцию QueryInterface(...) моего объекта то он запрашивает интерфейс CodecIImageBytes, который определён в одном из файлов как:   

Код

DEFINE_GUID(CodecIImageBytes,0x025d1823,0x6c7d,0x447b,0xbb, 0xdb, 0xa3, 0xcb, 0xc3, 0xdf, 0xa2, 0xfc);


я сравниваю эту переменную в QueryInterface(...)

Код

                if (IsEqualIID(riid,Gdiplus::CodecIImageBytes))
                {
                        ........
                }


но линкер пишет ошибку [Linker Error] Unresolved external '_CodecIImageBytes'

соответствующий .lib загружен

пробовал заново объявить переменную в основном блоке

Код

GUID Gdiplus::CodecIImageBytes; 


но компилятор создавал новый объект и не подклучает ранее объявленный! 

Как мне правильно использовать CodecIImageBytes? И как его правильно объявить если нужно?

Автор: xvr 21.4.2008, 14:22
Цитата(alrud @ 20.4.2008,  14:45)
Пытаюсь написать свой COM-объект, который будет работать с GDI+ (загружать картинки из памяти).  Когда GDI+ вызывает функцию QueryInterface(...) моего объекта то он запрашивает интерфейс CodecIImageBytes, который определён в одном из файлов как:   

Код

DEFINE_GUID(CodecIImageBytes,0x025d1823,0x6c7d,0x447b,0xbb, 0xdb, 0xa3, 0xcb, 0xc3, 0xdf, 0xa2, 0xfc);


но линкер пишет ошибку [Linker Error] Unresolved external '_CodecIImageBytes'

Как мне правильно использовать CodecIImageBytes? И как его правильно объявить если нужно?

Сделай .cpp файл в котором напиши
Код

#define INITGUID
#include <GdiPlus.h>


Автор: Rififi 21.4.2008, 14:38
добавление к посту xvr, 
для этого файла лучше отключить использование прекомпилированных заголовков.

Автор: alrud 22.4.2008, 23:35
Цитата


Сделай .cpp файл в котором напишикод C++

Код

#define INITGUID
#include <GdiPlus.h>




всё равно даёт ту же ошибку!!!

В guiddef.h есть код

Код


#ifdef INITGUID
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
        EXTERN_C const GUID DECLSPEC_SELECTANY name \
                = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
#else
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
    EXTERN_C const GUID FAR name
#endif // INITGUID



как я понял у меня не работает __declspec(selectany),  а почему не знаю, поэтому этот вопрос следует закрыть и задать новый

Автор: xvr 23.4.2008, 07:30
Цитата(alrud @ 22.4.2008,  23:35)
Цитата


Сделай .cpp файл в котором напишикод C++

Код

#define INITGUID
#include <GdiPlus.h>




всё равно даёт ту же ошибку!!!

В guiddef.h есть код

Код


#ifdef INITGUID
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
        EXTERN_C const GUID DECLSPEC_SELECTANY name \
                = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
#else
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
    EXTERN_C const GUID FAR name
#endif // INITGUID



как я понял у меня не работает __declspec(selectany),  а почему не знаю, поэтому этот вопрос следует закрыть и задать новый

Какой компилятор?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)