![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Гость_Игорь |
|
|||
|
Unregistered |
Здравствуйте.
Подскажите пжл как реализовать такое: Я хочу в DLL зашить некую информацию например о ее функции (плагине). Написал такое:
Но... Затык номер 1 - проблема со стрингами. Вроде все компилится и работает,но в тескстовых полях - каша. Я читал что нельзя использовать Делфовские строки в ДЛЛ - а использовать PChar, но тогда вместо текстовых полей будут указатели PChar, а мне надо чтоб структура была нерперывной - т.е. в памяти строки располагались одна за другой, а не их указатели Затык номер 2 - неодинаковое количество Argument : TArgumentInfo в структурах. т.е. в одном плагине их 2, в другом 3... Компилятор требует точного указания количеста (я его понимаю). Как в терминах Делфи можно указать, что например после поля ArgumentCount размещается несколько TArgumentInfo ?? Динамические массивы исключаются - т.к. я уже упоминал мне необходимо чтобы поля располагались один за другим а не их указатели. Кто решал подобные задачи. Натолкните на идею заранее спасибо. |
|||
|
||||
| Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 31 Всего: 155 |
1. Передавай указатель на буфер где храняться все структуры
2. Передавай полную длину структур в буфере(в байтах) 3. Используй: packed record 4. При получении указателя на структуры... обрабатывай их например так:
Это сообщение отредактировал(а) Girder - 15.7.2005, 13:48 -------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
| Гость_Игорь |
|
|||
|
Unregistered |
Не работает, поскольку строки в памяти лежат ХЗ как
(под строками я подразумеваю последовательность символов-байтов а не Делфовский string) т.е. если объявить A : array [0..3] of char = 'yes'#0; B : array [0..2] of char = 'no'#0; то это НЕ значит что в памяти будет лежать 'y','e','s',0,'n','o',0 такая же ситуация и с PChar и с String и с... кароче я все перепробовал Т.е. задача сводится к тому как правильно объявить строки чтоб они лежали правильно-друг за другом как указано выше |
|||
|
||||
| Girder |
|
||||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 31 Всего: 155 |
Вот пример
DLL:
Использование dll:
-------------------- Как слышим, так и пишим. Истина где-то там... |
||||
|
|||||
| vadims |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 8.6.2005 Репутация: нет Всего: 17 |
Гость_Игорь
Имхо Никак - в твоем варианте - на мой взгляд зря ты ругаешь Дельфи у него тоже ведь система есть 1 байт - длина строки + сама строка Но мне кажется что у тебя проблемы то нет - просто ты не очень хорошо понимаешь объявление-результат -------------------- Cpu not found ! Press any key for software emulation. |
|||
|
||||
| Гость_Игорь |
|
|||
|
Unregistered |
Girder
Спасибо за код. Буду разбираться. Примерно такое же намаслал и я Но у тебя другой подход. И, наверно, правильней чем у меня. vadims Согласен с тобой. Как оказалось простые, на первый взгляд вещи, в Делфи не так у ж просты. А вообще, такую задачу надо делать на asm-e. И размер ДЛЛ поменьше получается... |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |