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

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

Offset на строковую константу [D7, ME]


Страницы:   1 2 3 4 5

Ллирик ©   (2010-10-22 00:57:00) 

У меня не хочет компилироваться такой код:
const
Keymouse = 'Keymouse.sys';
............
asm
.......
push offset   Keymouse
..........
end;
Будьте добры, подскажите, что мне сделать.


Anatoly Podgoretsky   (2010-10-23 07:18:00) [81]


> про первый про первый) да и то шутя)

Я уже спрашивал, но вопрос был проигнорировал - какой string?


Германн   (2010-10-23 02:18:00) [82]


> Давайте конкретно - какую именно функцию Вы хотите вызвать?

Присоединяюсь к вопросу. Любую процедуру/функцию WinAPI можно вызвать из программы на Дельфи без всяких ассемблеров.
Но вот ".sys" и "offset" меня смущают. Не пытается ли автор лезть в функции драйвера "по старинке"?


Фокус_Ник   (2010-10-23 01:54:00) [83]


> Ллирик ©   (23.10.10 01:51) [14]

Давайте конкретно - какую именно функцию Вы хотите вызвать?


Ллирик   (2010-10-23 01:51:00) [84]


> sniknik ©   (22.10.10 22:46) [7]
> не нужен.
> push offset   Keymouse[1];
> аналог PChar будет, и даже #0 в конце будет. дельфи магия
> работы со строками...


const
Keymouse: String = 'Keymouse.sys';

push offset   Keymouse[1] не работает( Смещение получается совсем другим

> sniknik ©   (23.10.10 01:28) [12]
>
> и кстати ты про какой байт? про первый или про "даже #0
> в конце будет". если второе то это показатель как ты знаешь
> ассемблер.
>

про первый про первый) да и то шутя)


Фокус_Ник   (2010-10-23 01:46:00) [85]

> PChar пробовал. Компилируется
Значит, должно работать. Конечно, если все сделано правильно.

> но потом глянул в OllyDebugger`е, по этому адресу находится не строка,
> а какая-то ерунда.
Значит, что-то сделано неправильно.

> Если вызывать api, не на ассемблере, то Делфи ругается не на строки,
> а на 0 или nil, да на 1.
Если ругается - значит, вызов неправильный.

================

Не могу понять - зачем Вам ассемблер, если даже такая элементарщина уже вызывает проблемы?

Ругается тут, ругается там... каждое такое "ругательство" как раз и говорят о причине ошибки, поэтому их надо читать, переводить, думать, въезжать и устранять. А не думать, что, мол, вызову из Ассемблера - и сразу все заработает. Потому что никакой Ассемблер неверный код верным не сделает.


sniknik   (2010-10-23 01:28:00) [86]

и кстати ты про какой байт? про первый или про "даже #0 в конце будет". если второе то это показатель как ты знаешь ассемблер.


sniknik   (2010-10-23 01:25:00) [87]

ну, если для тебя один лишний байт неэффективно, то дельфи не для тебя...
он там будет, и не один, "лишний", причем сделаешь ты так или как-то по другому, или вообще не будешь ничего с этим делать, просто по самиму факту наличия строки. (а также динамических массивов/обьектов/rtti/vcl/модулей с их разделами инициализации/выравнивания/... везде есть свои "лишние" байты, и даже килобайты...)


Ллирик   (2010-10-23 01:00:00) [88]


> Фокус_Ник   (22.10.10 21:26) [6]
>
> Наверное, там нужен PChar? И не нужны никакие ассемблеры.

PChar пробовал. Компилируется, но потом глянул в OllyDebugger`е, по этому адресу находится не строка, а какая-то ерунда.
>
> Вместо того, чтобы почитать справку по стоковым типам, или
> посмотреть примеры в Инете...
>

Если вызывать api, не на ассемблере, то Делфи ругается не на строки, а на 0 или nil, да на 1.

> sniknik ©   (22.10.10 22:46) [7]
> не нужен.
> push offset   Keymouse[1];
> аналог PChar будет, и даже #0 в конце будет. дельфи магия
> работы со строками...
>

Наверно можно и так, но не эффективно, лишний байт в коде))


sniknik   (2010-10-23 00:29:00) [89]

> если при вызове функции API можно взять длинную строку и просто привести тип?
а тут что? -> Плохиш ©   (22.10.10 01:42) [1]
и что думаешь делается при приведении типа со строки в PChar? результаты равнозначны.

> А в случае константы даже и тип приводить не надо, все и так вызовется.
а в случае константы
> не хочет компилироваться такой код:

> Сначала ассемблерный код,
автор хочет, говорит ассемблер ему понятнее
> а потом "ассемблер не нужен".
правда жизни... ради вызовов апишных функций, ассемблер не нужен.


Фокус_Ник   (2010-10-22 23:21:00) [90]

> sniknik ©   (22.10.10 22:46) [7]

1. Зачем делать аналог PChar, если при вызове функции API можно взять длинную строку и просто привести тип? А в случае константы даже и тип приводить не надо, все и так вызовется.

2. Сначала ассемблерный код, а потом "ассемблер не нужен". Как понять тебя, Саид?


sniknik   (2010-10-22 22:46:00) [91]

> Наверное, там нужен PChar?
не нужен.
push offset   Keymouse[1];
аналог PChar будет, и даже #0 в конце будет. дельфи магия работы со строками...

> И не нужны никакие ассемблеры.
а вот тут согласен.


Фокус_Ник   (2010-10-22 21:26:00) [92]

> Ллирик ©   (22.10.10 20:21) [5]

> Я некоторые api вызвать не могу с теми аргументами, которые
> мне нужны, при компиляции  Делфи на них ругается)

Наверное, там нужен PChar? И не нужны никакие ассемблеры.

> Вот и решил вызывать функции постаринке
Вместо того, чтобы почитать справку по стоковым типам, или посмотреть примеры в Инете...

> Делфи начал изучать всего лишь две недели назад
В Делфи несколько строковых типов (ShortString, AnsiString, WideString) и соответствующие им указатели (PShortString, PChar, PWideChar).

См. справку по типам данных (и особенно обратите внимание на строки с управляемым временем жизни).


Ллирик   (2010-10-22 20:21:00) [93]

Я некоторые api вызвать не могу с теми аргументами, которые мне нужны, при компиляции  Делфи на них ругается) Вот и решил вызывать функции постаринке, тем более что я знаю хорошо. Это я Делфи начал изучать всего лишь две недели назад


sniknik   (2010-10-22 19:02:00) [94]

чего ты там оптимизировать на ассемблере собрался с такими знаниями?


Anatoly Podgoretsky   (2010-10-22 18:58:00) [95]

Какой String?


Ллирик   (2010-10-22 18:21:00) [96]

Так String добавляет в первый байт размер строки, а мне этого не надо


Плохиш   (2010-10-22 01:42:00) [97]


const
Keymouse: String = 'Keymouse.sys';


Страницы:   1 2 3 4 5

Наверх

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