Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2012, 23:07   #1
HellMercenariess
Форумчанин
 
Аватар для HellMercenariess
 
Регистрация: 27.07.2009
Сообщений: 547
По умолчанию Invalid data type при попытке чтения числа

строковые параметры считывает и записывает замечательно а вот с числами начались проблемы
Код:
 
reg: TRegIniFile;
 lCount:longint;
  {lCount:dWord;}

 reg := TRegIniFile.Create;
  reg.RootKey := HKEY_CURRENT_USER;
  reg.OpenKey('\Software\HabermannSoft\',true);
lCount:=reg.ReadInteger('ScreenSaver','LanchCount',0);
{ reg.WriteInteger('ScreenSaver','LanchCount', lCount);}
libLabel1.Caption:=InttoStr(lCount);

  reg.CloseKey;
  reg.OpenKey('\Software\HabermannSoft\',False);
libLabel2.Caption:=reg.ReadString('ScreenSaver','PlenoNomo',pNomo);
  reg.CloseKey;
  reg.Free;
считываемый параметр создал в RegOrganizer, установлена "десятичная система" пробовал заменять на "шестнадцатиричную".
"Виновник этого парада,он не дурак, ушел как надо!" Похороны панка.
HellMercenariess вне форума Ответить с цитированием
Старый 17.08.2012, 07:12   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Наверное, тип DWORD значения реестра не соответствует типу Longint в Дельфях.

Цитирую MSDN:


32-bit unsigned integer. The range is 0 through 4294967295 decimal.
This type is declared in WinDef.h as follows:
typedef unsigned long DWORD;

Теперь заглянем в хелп Дельфи:


Generic integer types for 32-bit implementations of Delphi

Integer -2147483648..2147483647 signed 32-bit
Cardinal 0..4294967295 unsigned 32-bit


Fundamental integer types

Shortint -128..127 signed 8-bit
Smallint -32768..32767 signed 16-bit
Longint -2147483648..2147483647 signed 32-bit
Int64 -2^63..2^63-1 signed 64-bit
Byte 0..255 unsigned 8-bit
Word 0..65535 unsigned 16-bit
Longword 0..4294967295 unsigned 32-bit

И угадайте после этого, какой тип надо объявлять переменной, чтоб не было несоответствия?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 17.08.2012 в 07:15.
Sciv вне форума Ответить с цитированием
Старый 17.08.2012, 10:13   #3
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Цитата:
И угадайте после этого, какой тип надо объявлять переменной, чтоб не было несоответствия?
Это не поможет. Читаем внимательно: http://docwiki.embarcadero.com/Libra...ry.TRegIniFile, особенно вот это предложение:
Цитата:
TRegIniFile enables handling the Windows 95/NT system registry as if it were a Windows 3.x INI file.
и понимаем, что этот класс предназначен для поддержки Win16, но никак не для написания новых приложений. TRegistry, и все прекрасно читается.
volvo877 вне форума Ответить с цитированием
Старый 18.08.2012, 20:25   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от volvo877 Посмотреть сообщение
Это не поможет. Читаем внимательно: http://docwiki.embarcadero.com/Libra...ry.TRegIniFile, особенно вот это предложение: и понимаем, что этот класс предназначен для поддержки Win16, но никак не для написания новых приложений. TRegistry, и все прекрасно читается.
Спасибо за пояснения, сам обычно пользуюсь TRegistry - мне его за глаза хватает. Ваше замечание - еще один плюс в его пользу
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 19.08.2012, 12:13   #5
HellMercenariess
Форумчанин
 
Аватар для HellMercenariess
 
Регистрация: 27.07.2009
Сообщений: 547
По умолчанию

Цитата:
Сообщение от volvo877 Посмотреть сообщение
и понимаем, что этот класс предназначен для поддержки Win16, но никак не для написания новых приложений. , и все прекрасно читается.
А почему же строки нормально читает и записывает без никаких проблем?

Похоже на то как вы пишете, там где я выдряпал эту процедуру она предназначена только для нахождения системной папки, но не для создания и работы в новой ветке, я не мог знать что тут такие тонкости . Буду пробовать с TRegistry.

Код:
reg.OpenKeyReadOnly('\Software\Microsoft\Windows\CurrentVersion\Explorer\');
reg.ReadString('Shell folders', folder, '');
  reg.CloseKey;
"Виновник этого парада,он не дурак, ушел как надо!" Похороны панка.
HellMercenariess вне форума Ответить с цитированием
Старый 19.08.2012, 12:18   #6
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Цитата:
А почему же строки нормально читает и записывает без никаких проблем?
Потому что INI-файлы под Win3.х работали только со строками, и не знали, что такое параметры типа Integer. Надо было читать из INI строку, и потом уже ее преобразовывать к нужному типу
volvo877 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Type Syntax error on token "return", invalid Type betirsolt Общие вопросы по Java, Java SE, Kotlin 2 26.01.2012 15:09
MSSQL 2005 text data type BloodWizard SQL, базы данных 7 25.10.2010 17:30
Ошибка Old format or invalid type library. doober Общие вопросы .NET 0 09.09.2010 16:56
Data type mismatch???!!! b.grigorev Помощь студентам 17 16.08.2010 08:37
Error: "invalid data conversion" Lion-Tiger БД в Delphi 0 19.06.2009 14:21