![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
передача объектов с DLL
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 ?