![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| malor |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 632 Регистрация: 17.11.2006 Репутация: нет Всего: нет |
Есть приложение, оно компилится. В нем есть динамическая линковка GDI+:
HMODULE hGDIPlsu = LoadLibrary(_T("gdiplus.dll")); В хэдере объявлен структура для хранения адресов функций из "gdiplus.dll":
В cpp-файле она заполняется нужными значениями:
Вставляю в него свой кусок кода, для сохранения скриншота в файл на диске:
Начинают выдаваться компилятором следующие сообщения:
GdipFree, GdipAlloc, GdipDisposeImage, GdipGetImageThumbnail, GdipCloneImage, GdipCreateBitmapFromHBITMAP прописать в структуре DYN_DLLS, расположенной в хэдере? Присоединённый файл ( Кол-во скачиваний: 3 )
DynGdiplusTest_1_Edit_0807.zip 22,07 Kb |
||||||||
|
|||||||||
| Vetos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: нет Всего: 4 |
Ну конечно нужно!
-------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Нет, их нужно написать в своей программе (раз уж вы взялись за животноводство, я имею в виду попытку скрестить ужа с ежом, точнее попытку динамически загрузить gdiplus) ВСЕ классы из Gdp+ обращаются к функциям из gdiplus.dll, и функций этих вагон и маленькая тележка. Засунуть их в какую либо структуру не получится, т.к. сорцы Gdi+ (которые находятся в ее хидерах) о ваших намерениях не знают ни сном ни духом |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
а зачем изобретать велосипед ???
Вызов нативного кода уже предусмотрен. Достаточно вызвать функцию так:
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
тогда ТС нужна статическая линковка GDIplus.lib
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Вот и я тоже не понимаю, зачем ТС пытается родить ежа и сделать динамическую линковку с Gdi+ |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
||||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Чувствуем, и пытаемся донести ее до ТС
п1 имеется в виду 'статическая линковка'? Если да, то на плюсах это тоже замечательно поедет. (Кстати - на С это не 'поедет' - Gdi+ это С++ библиотека 2 ТС - озвучь, пожалуйста, зачем тебе именно динамическая загрузка Gdi+? Может есть какие нибудь более безболезненные пути сделать то же самое? |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
не пойму - то не поедет, то затруднительно а по поводу си - тут интерфейсы "спокойно" юзаются, не то чтобы с++ библиотека,) в первом посту ТС пытается создать прототипы и получить адрес функи, ну и "запушать" аргументы функе, соответственно объявленому прототипу = без труда это все делается на СИ, как на тех плюсах зло**их = хз) |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Там не интерфейсы, там полноценные классы, увы Это он сделал, и наступил на то, чего не сделал |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
юзается хоть на асм... одно из тех почему не юзаем с++ вообщето как понимаю >GdiPlus::Bitset лезет во внутренности gdiplus.dll< лезет туда только через vtable[] , т.е. при инициализации нам возвращается таблица с адресочками и компиль уже себе этими адресами оперирует, т.к. при компиляции никто не знает где именно в длл окажется GdiPlus::Bitset Это сообщение отредактировал(а) ASMatic - 13.7.2011, 14:11 |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
если не использовать классы GDI+ то нужно вызывать нативный API (DllExports::GdipGetImageHeight(pImage, &ImgHeight);) только при этом не нужно вызывать DLL динамически, а просто слинковать статически и не иметь геморроя.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Неа, там исходные тексты на С++. Их можно выбросить и написать свое, на С, но заюзать напрямую из С нельзя - ну не понимает С компилятор С++ исходников
Нет, он лезет во внутренности DllExports::*, причем это явно написано в коде. Ну вот, например:
|
||||
|
|||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
xvr, исходные тексты, inline - никогда не высматривал чо там именно в gdi+. Теперь все на своих местах, сенкс)
ТС пишите свои обёртки |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |