Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





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


8-1210567473
namco
2008-05-12 08:44
2011.02.27
видео кодеки


15-1289748125
Sergeant88
2010-11-14 18:22
2011.02.27
Помогите найти компонент


15-1290029388
Юрий
2010-11-18 00:29
2011.02.27
С днем рождения ! 18 ноября 2010 четверг


15-1289660689
Медвежонок Пятачок
2010-11-13 18:04
2011.02.27
некоторые художники утверждают ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский