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

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

16-ричная запись [D4, Win95/98]


AndreyS ©   (2002-10-07 18:40:00) 

Как в Делфи записать число в 16-ричном ввиде. Есть библиотека dll на си куда надо
вставить в Переменную типа Word число в 16-ричной записи. Как сделать? И как
в dll указывают, что число следуеть получить в такой то записи. Или вообше
все не так, тогда как? У меня код конфигурации устройства в 16-ой записи.
Нужно передать его в библиотеку. В описании это тип Word. В десятичном
представлении не работает.


han_malign   (2002-10-09 17:28:00) [1]

вот и надо посмотреть если в исходниках функции не экспортированны как stdcall, значит однозначно cdecl, я когда Lame MP3 encode DLL подключал на это напоролся, хотя смущает что в демке stdcall проставлен.


TTCustomDelphiMaster   (2002-10-09 17:22:00) [2]

Конечно не факт, но исходники у него то есть.


han_malign   (2002-10-09 17:15:00) [3]

не факт что stdcall, возможно cdeclесли DLL компилировалось под C и не было явно указанно что функции экспортируются как stdcall


TTCustomDelphiMaster   (2002-10-09 16:59:00) [4]

Но Вы же привели цитату из help для встроенного ассемблера, а у него свой синтаксис, отличный от синтаксиса Object Pascal. Я не поленился проверить, понимает ли OP такие конструкции, результат оказался предсказуемым:


procedure TForm1.Button1Click(Sender: TObject);
procedure ShM(i: integer);
begin
ShowMessage(inttostr(i));
end;
begin
ShM(999);
ShM($3E6);
//ShM(3E5H)); // ошибка при компиляции
//ShM(1744O); // ошибка при компиляции
//ShM(1111100011B); // ошибка при компиляции
asm
mov eax, 3E5H
call ShM
mov eax, 1744O
call ShM
mov eax, 1111100011B
call ShM
end;
end;


Когда я говорил о двоичной записи в Delphi, я имел ввиду синтаксис Object Pascal, а не Inline assembler, и соответственно использование двоичной записи без привлечения директивы asm. Я не очень хорошо знаю Delphi и может Вы подскажете как нужно работать с двоичными записями.


Рыжик   (2002-10-09 08:39:00) [5]

А с чего это они не допустимы? Это цитата из Delphi-helpа. И у меня всё работает. Если у вас чего-то не допускается, то прочитайте внимательнее.


TTCustomDelphiMaster   (2002-10-08 17:38:00) [6]

Рыжик © (08.10.02 09:31)

Было бы вообще великолепно, если бы такие конструкции были допустимы синтаксисом OP.


Рыжик   (2002-10-08 09:31:00) [7]

Дополнение:
Numeric constants must start with one of the digits 0 through 9 or the $ character. When you write a hexadecimal constant using the H suffix, an extra zero is required in front of the number if the first significant digit is one of the digits A through F. For example, 0BAD4H and $BAD4 are hexadecimal constants, but BAD4H is an identifier because it starts with a letter.


Рыжик   (2002-10-08 09:30:00) [8]


> TTCustomDelphiMaster © (07.10.02 19:19)
>
> > А все-таки как двоичная запись буде выглядеть
>
> А оно Вам надо? Я тоже не встречал двоичной записи в Delphi.

By default, numeric constants use decimal notation, but the built-in assembler also supports binary, octal, and hexadecimal. Binary notation is selected by writing a B after the number, octal notation by writing an O after the number, and hexadecimal notation by writing an H after the number or a $ before the number.


TTCustomDelphiMaster   (2002-10-07 19:36:00) [9]


> Это могет быть (скорей всего так- судя по инфе от вас).


На меня ссылаться не надо. Я ничего не знаю про Ваш осциллограф.


AndreyS   (2002-10-07 19:30:00) [10]

В виде SetChanalConfig(1, 0) все работает нормально. В си примере и с остальными
конфигурациями все нормально работает. Но в демках для Дельфи действительно
все странно. Пример один называется, что для разных конфигураций какнала демка,
а в реалии выставлена везде одна конфигурация. Ох не спроста наверное. Хотя по логике
должно все работать. Есть правда одно но. Пример в Си работает не через dll
а исходник в явном виде. Может меня просто надули. Тоесть для Си полнофунуциональный
вариант, а dll не полнофункциональная. Это могет быть (скорей всего так- судя по инфе от вас).
Завтра буду изучать исходник на Си. В общем кажется мои опасения верны и мне пихнули
не полнофункциональный dll и надо идти бить морду продавцу или
еще кому-нибудь ответсвенного за драйвера. Или из исходника на Си сделать нормальную
dll. В общем буду разбираться. Спасибо за помощь.


TTCustomDelphiMaster   (2002-10-07 19:19:00) [11]


> А все-таки как двоичная запись буде выглядеть

А оно Вам надо? Я тоже не встречал двоичной записи в Delphi.

Пример то точно рабочий? Возможно нет никакого первого канала. Что возвращает функция?Как Вы определяете что не работает?


AndreyS   (2002-10-07 19:13:00) [12]

Так я про то и говорю что Страно ибо 4 и $4 действительно равны. Яж исходя из
этого и писал как выше. Но не работает. Чтож будем разбираться. Может Дельфи
старый (у меня четверка). А в хелпе написано, что stdcall вероятно будет модернизирована.
А все-таки как двоичная запись буде выглядеть. Какой префикс? А то ни в одной книжке по Делфи
ни гу гу у меня на этот счет не написано.


TTCustomDelphiMaster   (2002-10-07 19:05:00) [13]

Вообще то 4 и $4 равны. Читайте про stdcall.


AndreyS   (2002-10-07 19:04:00) [14]

Спасибо- про stdcall я не забыл и в демке это так и стоит. Но вариант
SetChanalConfig(1, 4) у меня не заработал. А странно. А понимает ли Дельфи
действия например $1D*$7? И как записать в двоичном виде? (так для полной
ястности в этом вопросе подскажите)


Best Before 2024   (2002-10-07 18:58:00) [15]

так
SetChanalConfig(1, $4);
или
SetChanalConfig(1, 4);

и не забудте stdcall


AndreyS   (2002-10-07 18:55:00) [16]

Если можно, то поскажите все-таки как в Дельфи пишется в 16-ричном виде (если это
вообще есть) А код то в некотором смысле и приводить не стоит.
Вот есть процедура SetChanalConfig(a, b) Оба типа Word Первый (а) устанавливает
номер канала осциллографической платы, а (b) конфигурацию множителя напряжения канала.
Вот в си примере Это так SetChanalConfig(1, 0x04). А во всех демках под
делфи только SetChanalConfig(1, 0) и есть (где 0x00 - только один множитель по напряжению=1).
В Си SetChanalConfig(1, 0x04) работает, а дельфи не работает ни
SetChanalConfig(1, 0x04) ни SetChanalConfig(1, 04) ни SetChanalConfig(1, 4) и вообще
никак.


TTCustomDelphiMaster   (2002-10-07 18:53:00) [17]

...
Dllproc($AABB);
...

и не забудте stdcall


Best Before 2024   (2002-10-07 18:44:00) [18]

. В описании это тип Word. В десятичном
представлении не работает.
??
Этого не может быть! Само число остается числом независимо от формы записи, давайте кусок кода, как Вы делаете?


Наверх

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