![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
tigger |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
Вообщем есть программа, глобальный хук.
В dll необходимо передать массив THandle и там с ним работать. В приложении пишу procedure sethook(P:PP_ID; int:integer); external 'lib_hook.dll' name 'sethook';
теперь в dll
что может быть как лечить? |
||||
|
|||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 2 Всего: 260 |
tigger, sharemem или любой другой альтернативный менеджер памяти подключены и там, и там? в общем - проблем с доступом к совместно используемой памяти нет?
|
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
так. мне кажется не очень корректно объявлять указатель на дин.массив. и работать с ним через GetMem...
объяви уж тогда array [0..0] of... и отключи Range Checking -------------------- There are always someone smarter than you... |
|||
|
||||
tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
sharemem не подключен попробую сделать.
Потом сообщу. |
|||
|
||||
skyboy |
|
||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 2 Всего: 260 |
tigger, обрати внимание на слова MetalFan. Динамический массив != обычный массив.
во-первых, можешь полезть в исходный код процедуры DynArraySetLength и увидеть, что как минимум на два longint'a длина структуры типа "динамический массив" больше суммы длин всех его составляющих элементов. во-вторых, почему не пользуешь setlength и length для работы с динамическим массивом? брезгуешь, что ли? Добавлено @ 02:49 а ведь он обязан быть подключен, если в/из dll передаются: строки, динамические массивы и объекты(насчет последнего не уверен на 100%). т.е. всё то, что передается по ссылке и имеет неопределенный заранее размер. причем, при создании dll в Delphi wizard прямо так и пишет:
|
||||
|
|||||
tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: -1 Всего: 4 |
пробовал Sharemem использовать и передавать тупо массивы THandle и такое ощущение что ловушка из глобальной переделалась в локальную, ничего кроме себя не отлавливает.
|
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 2 Всего: 260 |
||||
|
||||
remax |
|
|||
![]() Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: нет Всего: 5 |
Для передачи массива в DLL можно использовать либо отображаемые в память файлы либо технологию интерфейсов.
-------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 16 Всего: 459 |
А в чем вообще проблема? Передавайте массив как буфер данных и все. Если скопировать его по значению так вообще не будет ни каких проблем. Передавайте его не как массив, а как указатель на нулевой элемент и отдельно длину.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
фактически тема продублирована автором в соседней теме
а можно и еще проще - первые 2 байта - размер массива/записи) как в виндах cbSize первым полем идет во многих местах. -------------------- There are always someone smarter than you... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |