8 / 8 / 2
Регистрация: 02.10.2014
Сообщений: 112
|
||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||
Вернуть TBitmap из .dll25.07.2016, 21:16. Показов 1106. Ответов 10
Метки нет (Все метки)
Доброго времени суток!
Столкнулся со странным глюком, и как обойти не знаю, точнее не понимаю, чего от меня хотят. Возможно кто то сталкивался. Есть dll собранная все все в том же RadStudio (10, ибо только там появилась поддержка Desktop Duplication API). Функции в dll объявлены следующим образом:
Но как только пытаюсь провернуть следующее:
Заранее спасибо!
0
|
25.07.2016, 21:16 | |
Ответы с готовыми решениями:
10
как вернуть HBITMAP у Graphics::TBitmap Вернуть HBITMAP из c++ dll Вернуть строку из .dll на С++ в программу на VB 6.0 Как из c++ dll функции вернуть RGB\ARGB цвет? |
Модератор
3389 / 2161 / 352
Регистрация: 13.01.2012
Сообщений: 8,380
|
|
26.07.2016, 08:19 | 2 |
Meoww, в последнем куске инициализация динамически созданным объектом не нужна - указатель все равно затрется после возврата из функции. Ошибка или в том что объект не возвращается или в конвертации - Вы пробовали приводить так обычный объект на своей стороне?
Добавлено через 1 минуту +а тот ли это класс? Не нужно ли указать Graphics:: ?
0
|
8 / 8 / 2
Регистрация: 02.10.2014
Сообщений: 112
|
|
26.07.2016, 08:40 [ТС] | 3 |
Доброго утра. Класс тот - при указании Graphics:: ничего не меняется. Да, при использовании (не в dll) таким макаром отработано очень много - и всегда без ошибок. Если вы про эту иннициализацию (bitmap = new TBitmap; ) то конечно в коде ее нет - битмап создается один раз в начале.
В том то и дело что битмап возвращается, с хендлом и тд - абсолютно адекватный, насколько позволяют мои знания. Терзают меня смутные сомнения, что все это каким то макаром связанно с dll, а точнее с библиотекой vcl - очень уж она любит работать только в главном потоке. Не так много знаю, чтобы судить - пробую разобраться. Обидно, но блин в TImage как то выводит же.
0
|
Практикантроп
4827 / 2719 / 526
Регистрация: 23.09.2011
Сообщений: 5,778
|
||||||
26.07.2016, 08:41 | 4 | |||||
Я обычно инициализирую битмап иначе:
0
|
8 / 8 / 2
Регистрация: 02.10.2014
Сообщений: 112
|
|||||||||||
26.07.2016, 08:51 [ТС] | 5 | ||||||||||
Прошу прощения за дубль - еще одна интерестность:
если в программе создается битмап один раз в начале, то
nick42 - спасибо) (также создаю битмап один раз в начале) не имеет значения какой битмап используется - вылетает. Я уже и через GDI с HBITMAP пробовал - то-же только в профиль
0
|
Модератор
3389 / 2161 / 352
Регистрация: 13.01.2012
Сообщений: 8,380
|
|
26.07.2016, 08:53 | 6 |
Meoww, vcl не влияет хотя то что это битмап пикчи имаджа конечно заставляет работать с ним через синхронайз но не думаю что выбивает изза того что его нет
0
|
8 / 8 / 2
Регистрация: 02.10.2014
Сообщений: 112
|
|
26.07.2016, 09:02 [ТС] | 7 |
Просто сталкивался с подобной "плавающей" ошибкой - тут на форуме есть топик - там именно с синхронизацией потока связанно, что к слову очень раздражает - сумасшедшая потеря времени. Оффтоп))) ддлка написанная на шарпе (используется тот же directX только managed), прикрученая ...эм) вообщем подключенная к проекту на с++ через костыль - работает. Но это же не вариант
0
|
Практикантроп
4827 / 2719 / 526
Регистрация: 23.09.2011
Сообщений: 5,778
|
||||||
26.07.2016, 09:22 | 8 | |||||
Ну, вот такие две кнопки создают и удаляют битмап без проблем (это без длл, конечно)__
0
|
8 / 8 / 2
Регистрация: 02.10.2014
Сообщений: 112
|
|||||||||||
26.07.2016, 11:14 [ТС] | 9 | ||||||||||
Да это понятно. Все оно работает, пока находится внутри программы, а вот вынес в dll - проблема. Может и смирился бы - но в image же выводит, и вот при доступе к битам - ошибки.
Добавлено через 9 минут Вот так работает сохранение (понятно что память течет, и доступ к битам один черт не работает, но все же)
Что не так!?!?!
0
|
Практикантроп
4827 / 2719 / 526
Регистрация: 23.09.2011
Сообщений: 5,778
|
|
26.07.2016, 11:40 | 10 |
А pBitmap = NULL после delete не поможет?
0
|
8 / 8 / 2
Регистрация: 02.10.2014
Сообщений: 112
|
|
26.07.2016, 11:57 [ТС] | 11 |
Неа. Итак, к сожалению, кажется обнаружил очередной глюк. DLL была собрана в rad10 berlin, так как в предыдущих версиях попросту не было хедера DXGI1_2.h. А сам проект ведется, или точнее теперь уже велся, в rad8, из-за тормозов 10-ки на моем, далеко не самом слабом железе. Одним словом - пересобранный проект в rad10 berlin отлично работает, не вызывая никаких ошибок. Итог - очередной глюк.
Приношу свои извинения за беспокойство
0
|
26.07.2016, 11:57 | |
26.07.2016, 11:57 | |
Помогаю со студенческими работами здесь
11
Возможно ли вернуть двухмерный массив строк из DLL функции написаной на C++ Tbitmap.create и Tbitmap.scanline Как вернуть параметр атрибута из сборки .dll? Создать dll и вернуть из функции значение строки Как вернуть значение (int) из созданной dll? Как вернуть переменные из dll обратно в программу? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |