Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.02.27;
Скачать: CL | DM;

Вниз

Offset на строковую константу   Найти похожие ветки 

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

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


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


const
Keymouse: String = "Keymouse.sys";


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

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


 
Anatoly Podgoretsky ©   (2010-10-22 18:58) [3]

Какой String?


 
sniknik ©   (2010-10-22 19:02) [4]

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


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

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


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

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

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

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

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

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

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


 
sniknik ©   (2010-10-22 22:46) [7]

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

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


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

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

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

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


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

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

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

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


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


> Фокус_Ник   (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 01:25) [11]

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


 
sniknik ©   (2010-10-23 01:28) [12]

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


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

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

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

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

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

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

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


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


> 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:54) [15]


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

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


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


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

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


 
Anatoly Podgoretsky ©   (2010-10-23 07:18) [17]


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

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


 
Ллирик ©   (2010-10-23 18:54) [18]


> Фокус_Ник   (23.10.10 01:46) [13]
>
> > PChar пробовал. Компилируется
> Значит, должно работать. Конечно, если все сделано правильно.
>
>
> > но потом глянул в OllyDebugger`е, по этому адресу находится
> не строка,
> > а какая-то ерунда.
> Значит, что-то сделано неправильно.
>

Так подскажите, что именно неправильно

>
> > Если вызывать api, не на ассемблере, то Делфи ругается
> не на строки,
> > а на 0 или nil, да на 1.
> Если ругается - значит, вызов неправильный.
>
> ================
>
> Не могу понять - зачем Вам ассемблер, если даже такая элементарщина
> уже вызывает проблемы?
>
> Ругается тут, ругается там... каждое такое "ругательство"
> как раз и говорят о причине ошибки, поэтому их надо читать,
>  переводить, думать, въезжать и устранять. А не думать,
> что, мол, вызову из Ассемблера - и сразу все заработает.
>  Потому что никакой Ассемблер неверный код верным не сделает.

Извините, но 0 или nil я взял не с неба, а прочитал в цикле статей написаных, конечно, на ассемблере, но правильность значения от этого ни чуть не уменьшается! С 1 это, конечно, моя придумка, но моем случае API с этим значением работает как надо.


> Германн ©   (23.10.10 02:18) [16]
>
> Присоединяюсь к вопросу. Любую процедуру/функцию WinAPI
> можно вызвать из программы на Дельфи без всяких ассемблеров.
>
> Но вот ".sys" и "offset" меня смущают. Не пытается ли автор
> лезть в функции драйвера "по старинке"?


Да, я пишу программу управления для моего драйвера.


> Anatoly Podgoretsky ©   (23.10.10 07:18) [17]
>
> Я уже спрашивал, но вопрос был проигнорировал - какой string?
>
>

ShortString


 
Anatoly Podgoretsky ©   (2010-10-23 19:30) [19]

В приведеном коде никакой ShortString не обнаружен.


 
Ллирик ©   (2010-10-23 20:44) [20]


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

Надо не так, а вот так:
const
 Keymouse: string = "Keymouse.sys";
.........
push [Keymouse]


 
Anatoly Podgoretsky ©   (2010-10-23 20:47) [21]

> Ллирик  (23.10.2010 20:44:20)  [20]

И где тут ShortString?


 
Ллирик ©   (2010-10-23 20:58) [22]

а  лучше так
const
 Keymouse: pansichar = "Keymouse.sys";
...........
push [Keymouse]


 
Anatoly Podgoretsky ©   (2010-10-23 21:12) [23]

> Ллирик  (23.10.2010 20:58:22)  [22]

Чем лучше?


 
Ллирик ©   (2010-10-23 21:17) [24]


> Anatoly Podgoretsky ©   (23.10.10 20:47) [21]
>
> > Ллирик  (23.10.2010 20:44:20)  [20]
>
> И где тут ShortString?

Тип String эквивалентен типу ShortString. Вам разве было об этом не известно?


 
Amoeba_   (2010-10-23 21:25) [25]


> Тип String эквивалентен типу ShortString. Вам разве было
> об этом не известно?

Ты что, с дуба рухнул?


 
Anatoly Podgoretsky ©   (2010-10-23 21:25) [26]

> Ллирик  (23.10.2010 21:17:24)  [24]

Мне это не известно, но я находил "странных" программистов, которые
принудительно это делали. Ты из них?


 
Ллирик ©   (2010-10-24 00:41) [27]

я цитирую учебник Никиты Кулькина "Основы программирования в Delphi 2007"


 
Юрий Зотов ©   (2010-10-24 00:49) [28]


> Ллирик ©   (24.10.10 00:41) [27]

А я, с Вашего разрешения, процитирую справку по Delphi 7:

The reserved word string functions like a generic type identifier. For example,
var S: string;
creates a variable S that holds a string. In the default {$H+} state, the compiler interprets string (when it appears without a bracketed number after it) as AnsiString. Use the {$H-} directive to turn string into ShortString.


Не думаю, что Delphi 2007 что-то изменилось.


 
Ллирик ©   (2010-10-24 01:11) [29]

а я английского не знаю)


 
Ллирик ©   (2010-10-24 01:15) [30]

по этому и скачал учебник на русском


 
Юрий Зотов ©   (2010-10-24 01:48) [31]

Что ж, тогда продолжайте упражняться в выдумывании проблем.


 
Похиш   (2010-10-24 03:07) [32]


> Тип String эквивалентен типу ShortString. Вам разве было
> об этом не известно?

И эти кадры пишут драйвера :-))) Моя гоготать...


 
Ллирик ©   (2010-10-24 03:24) [33]

да) пишу их на асме, и представьте себе они работают)


 
Германн ©   (2010-10-24 04:01) [34]


> пишу их на асме, и представьте себе они работают

Готов поверить, что они работают ибо заготовок для написания несложных драйверов полно.


 
Anatoly Podgoretsky ©   (2010-10-24 09:44) [35]


> я цитирую учебник Никиты Кулькина "Основы программирования
> в Delphi 2007"

Врешь ты все и Кулькина зря опускаешь.


 
Anatoly Podgoretsky ©   (2010-10-24 09:45) [36]

> Ллирик  (24.10.2010 03:24:33)  [33]

Врешь ты все.


 
Ллирик ©   (2010-10-24 16:45) [37]


> Германн ©   (24.10.10 04:01) [34]
>
>
> > пишу их на асме, и представьте себе они работают
>
> Готов поверить, что они работают ибо заготовок для написания
> несложных драйверов полно.
>

Если фильтр  клавиатуры, написанный с чистого листа, считается простеньким, то да, я пишу не сложные драйвера)


> Anatoly Podgoretsky ©   (24.10.10 09:44) [35]
>
> > я цитирую учебник Никиты Кулькина "Основы программирования
> > в Delphi 2007"
>
> Врешь ты все и Кулькина зря опускаешь.

Правда, вру) Не в "Основы программирования Delphi 2007", а в  "Основы программирования Delphi 7"


 
Игорь Шевченко ©   (2010-10-24 16:52) [38]


> Никиты Кулькина


эт кто ?


 
Юрий Зотов ©   (2010-10-24 16:56) [39]

Пишите драйвера, зачем Вам тратить время на Delphi? За драйвера, кстати, и платят больше. А уж если потребуется сделать визуальный интерфейс, то наймите программиста Delphi - часть денег отдадите ему, да и Вам еще останется. И скорость разработки, кстати, будет выше.


 
Ллирик ©   (2010-10-24 18:06) [40]


> Юрий Зотов ©   (24.10.10 16:56) [39]
>
> Пишите драйвера, зачем Вам тратить время на Delphi? За драйвера,
>  кстати, и платят больше. А уж если потребуется сделать
> визуальный интерфейс, то наймите программиста Delphi - часть
> денег отдадите ему, да и Вам еще останется. И скорость разработки,
>  кстати, будет выше.

не) Лучше я сам всё изучу и буду  сам себе хозяин) и будет - что хочу, то и ворочу))



Страницы: 1 2 3 вся ветка

Текущий архив: 2011.02.27;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.009 c
15-1289770190
Юрий
2010-11-15 00:29
2011.02.27
С днем рождения ! 15 ноября 2010 понедельник


2-1291283179
Великий
2010-12-02 12:46
2011.02.27
Посимвольное считывание из Edit а


2-1291285177
Свободный художник
2010-12-02 13:19
2011.02.27
работа с форматом dwg, конертация bmp в dwg и обратно


15-1289990564
alexdn_
2010-11-17 13:42
2011.02.27
Майкрософт, конференция, платформа 2011


2-1290769217
dm
2010-11-26 14:00
2011.02.27
изменение ip адреса шлюза и пр