Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

передача объектов с DLL


Страницы:   1 2

novichek ©   (2010-01-08 18:39:00) 

только начинаю осваивать работу с dll

в DLL описал процедуру, которая находится в моём приложении
 SetImage: procedure (bmp: Graphics.TBitMap);

после загрузки DLL передаю адрес этой процедуры.

procedure SetImage(bmp: TBitMap); stdcall;
begin
ShowMessage(IntToStr(bmp.Width)); // acces
end;

в dll создается битмап и вызывается процедура приложения где он и передается параметром.. ну и получаю acces если пытаюсь в этом обработчике обратиться к любому свойству этого битмапа.

всякие там числа, строки нормально передаются...
может как-то по-другому нужно объекты передавать?


sniknik   (2010-01-08 22:47:00) [21]

> да пробывал, нифига не работает...
> вроде бы и параметры создаваемого битмапа такие же делал, а нифига..
очень информативно. сейчас кто нибудь скажет где у тебя ошибка, по этой полной информации...
p.s. лично я ставлю на 17ю строку...


novichek   (2010-01-08 22:19:00) [22]

да пробывал, нифига не работает...
вроде бы и параметры создаваемого битмапа такие же делал, а нифига..


Джо   (2010-01-08 21:53:00) [23]

Честное слово, в справке всё написано :)


Джо   (2010-01-08 21:53:00) [24]


> ну дайте кусочек кода как создать TbitMap имея HBITMAP ?

Bitmap := TBitmap.Create
Bitmap.Handle := Handle


novichek   (2010-01-08 21:07:00) [25]

да вот час уже сижу читаю..

ну дайте кусочек кода как создать TbitMap имея HBITMAP ?

да, если это конечно поможет мне с передачей картинки от dll к проге.. :)


Anatoly Podgoretsky   (2010-01-08 20:45:00) [26]

> novichek  (08.01.2010 20:27:09)  [9]

У тебя неправильный Гугл.


novichek   (2010-01-08 20:27:00) [27]

не, работу с HBITMAP я не потяну)

посдкажите пожалуйста, если я буду передавать с dll Tbitmap.handle, который HBITMAP,
как в проге с полученного HBITMAP сделать TBitMap дельфей?

что - то вообще гугль по работе с HBITMAP в Delphi не хочет рассказывать :(


Palladin   (2010-01-08 19:28:00) [28]


> novichek   (08.01.10 19:21) [7]

Ну еклмн!!, зри глубже, передача указателей на указатели, а объекты классов делфи именно таковыми и являются, ничем не отличается от передачи самих объектов. Не нужно передавать ни объекты делфи, ни указатели на объекты делфи, ни указатели на указатели на объекты делфи, и т.д.! Какая к хрену разница передал ты объект делфи или указатель на него. От этого он объектом быть не перестанет, а вот RTTI у них будет зело разная!


novichek   (2010-01-08 19:21:00) [29]

"между хостом и dll сводится к обмену указателями "

попробывал передавать указатель

 type
    bbb = ^TBitMap;

.....

procedure SetImage(bmp: bbb); stdcall;
begin
 ShowMessage( TBitmap(@bmp).Width) );
end;

та же хрень.. или смысл был в другом?

попробывал бегло покопать в сторону HBITMAP - ужас!
как тяжко там создавать и рисовать...


Palladin   (2010-01-08 19:10:00) [30]

Вот, к сожалению, погуглить на тему передачи именно битмапов или, тех или иных, объектов Delphi, тут особо не получится, ибо тема не сильно тривиальна. Можно сохранить его в TMemoryStream, передать указатель, а потом оттуда-же считать.

А вообще обмен данными между хостом и dll сводится к обмену указателями на тот или иной выделенный участок памяти и, в случае необходимости конечно, его (участка) размер. Вот это и будет самый независимый от ЯП обмен данными )


novichek   (2010-01-08 19:02:00) [31]

спасибо, попробую копать в сторону HBITMAP
тяжко пока на этом winapi работать..

Не занят,  
   да нет, вылетает ошибка при попыьке обратиться к любому свойству..

"Есть другая куча способов"   не могли бы подсказать где почитать можно про это? по каким параметрам гуглить?


Не занят   (2010-01-08 18:57:00) [32]


> ну и получаю acces


Не может быть. Наоборот, не должен его получать.


Palladin   (2010-01-08 18:57:00) [33]

Разрешение нужно, но тебе его все равно не дадут )


> так что получается, никак нельзя?

Ну отчего же, запросто можно, например, создать объект системы типа HBITMAP. Передать его в (или принять от) хост приложения и работать с ним сколько душе угодно. Есть другая куча способов передачи данных в независимых от среды разработкиформатах, особенно учитывая, что память у dll и хоста общая.


novichek   (2010-01-08 18:49:00) [34]

я думал не нужно разрешения )

так что получается, никак нельзя?


Palladin   (2010-01-08 18:48:00) [35]

А тебе кто разрешил передавать экземпляры классов Delphi между хост-приложением и dll ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо