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

Вниз

Не могу добиться от функции работы   Найти похожие ветки 

 
InfraRed   (2007-01-18 01:26) [0]

Задаю параметр для открытия ключа HKEY_USERS
То Функция RegEnumKeyEx возвращает список ключей

Задаю параметр для открытия ключа HKEY_LOCAL_MACHINE
Функция RegEnumKeyEx ни какого списка не возвращает видимую ошибку не возвращает - догнать не могу чево нехватает.

procedure TForm1.Button1Click(Sender: TObject);
Var Rez: Integer;
   Buff: Pointer;
   i: integer;
   Name: String;
   BuffSise: Cardinal;
   MyKey: HKEy;
begin
 Rez:=RegConnectRegistry(PChar(edName.Text),HKEY_LOCAL_MACHINE,REMOT_KEY);
 if Rez <> ERROR_SUCCESS then begin ShowMessage("Connection No!"); Exit; End;
 ShowMessage("Connection Ok!");
 try
   Lst := TStringList.Create;
   i:=0;
   BuffSise:=1024;
   GetMem(Buff,BuffSise);
   while RegEnumKeyEx(REMOT_KEY,i,buff,BuffSise,Nil,NIl,Nil,Nil) = ERROR_SUCCESS do
     begin
       Application.ProcessMessages;
       BuffSise:=1024;
       SetLength(Name,BuffSise);
       CopyMemory(@Name[1],Buff,BuffSise);
       Lst.Add(Name);
       Inc(i);
     end;
   Memo1.Lines.AddStrings(Lst);
 finally
   FreeMem(Buff,BuffSise);
   RegCloseKey(REMOT_KEY);
   Lst.Free;
 end;
end;


 
Джо ©   (2007-01-18 01:32) [1]

Код не смотрел, но вместо
> if Rez <> ERROR_SUCCESS then begin ShowMessage("Connection
> No!");

используй
if not .... then
 RaiseLastOsError;


чтобы увидеть вразумительное сообщение об ошибке.


 
InfraRed   (2007-01-18 02:03) [2]

Разобрался таки - проблема была в сетевых адаптерах.


 
Германн ©   (2007-01-18 02:28) [3]


> InfraRed   (18.01.07 02:03) [2]
>
> Разобрался таки - проблема была в сетевых адаптерах.
>

Ну так nobless oblige должно бы было заставить тебя "прояснить сию проблему" и выдать решение!


 
infraRed   (2007-01-18 12:05) [4]

nobless oblige это кто есть такой?


 
infraRed   (2007-01-18 12:20) [5]

> Джо ©   (18.01.07 01:32) [1]
-  RaiseLastOsError ни чем не отличается от LastError

LastError  - а получение оного мне ни очем не говорит, как извлеч причину ошибки? Допустим  GetLastError = 997


 
Джо ©   (2007-01-18 12:23) [6]

> [5] infraRed   (18.01.07 12:20)
> > Джо ©   (18.01.07 01:32) [1]
> -  RaiseLastOsError ни чем не отличается от LastError

Оно отличается тем, что вызывает исключение с текстовым описанием ошибки, а не просто кодом.


 
infraRed   (2007-01-18 12:35) [7]

Unit
SysUtils

Syntax
[Delphi] procedure RaiseLastOSError(); overload;
[Delphi] procedure RaiseLastOSError(LastError: Integer); overload;
Description

- вот в справке нашел в модуле систем нашел:

procedure RaiseLastOSError;
begin
 RaiseLastOSError(GetLastError);
end;

какойбы нибудь примерчик как содерзание ошибка извлечЬ? или примерчик применения  RaiseLastOSError  очень плиз.


 
Джо ©   (2007-01-18 12:38) [8]

> какойбы нибудь примерчик как содерзание ошибка извлечЬ?
> или примерчик применения  RaiseLastOSError  очень плиз.

Примерчик в [1].


 
infraRed   (2007-01-18 12:46) [9]

> Джо ©   (18.01.07 12:38) [8]
> Примерчик в [1].

И то правильно потому, что RegEnumKeyEx(REMOT_KEY,i,buff,BuffSise,Nil,NIl,Nil,Nil) = ERROR_SUCCESS

По спецификации возвращает только ERROR_SUCCESS если правильно работает, Но суть в том, что она возвращает правильные ответ, но работу не выполняет в одних случаях, а вдругих выполняет. Как же причину разыскать?


 
Джо ©   (2007-01-18 12:53) [10]

RegEnumKeyEx также (кроме кода ошибки) еще и может возвратить ERROR_NO_MORE_ITEMS и ERROR_MORE_DATA.


 
Джо ©   (2007-01-18 12:55) [11]

А в цикле while вообще не обрабатывается результат возврата, кроме как на ERROR_SUCCESS.


 
Джо ©   (2007-01-18 13:07) [12]

> Но суть в том, что она возвращает правильные ответ, но
> работу не выполняет в одних случаях, а вдругих выполняет

Кстати, что это значит? Т.е.: «работу не выполняет».


 
InfraRed   (2007-01-18 14:15) [13]

> Джо ©   (18.01.07 13:07) [12]
> Кстати, что это значит? Т.е.: «работу не выполняет».

С этим я и пытаюсь разобраться.
Я сное дело, что машины в сетке я юзаю на vmware там несколько адаптеров один для vmnat vmhost-only
Вот когда остается включенным vmnat адаптер то происходит следующеее конект =  ERROR_SUCCESS
Функция RegEnumKeyEx в цикле тоже = ERROR_SUCCESS Но данные пусты Буффер = 0

При включенных обоих адаптерах все происходит Ок! Но Можно просмотреть ключи первого уровня а Подключи уже не открываются в следующем коде:

if RegOpenKeyEx(REMOT_KEY,PChar(edSubKey.text),0,KEY_QUERY_VALUE,SubKey) = ERROR_SUCCESS then begin
   ShowMessage("Open Key Ok!");
   RegEnumKeys(SubKey,"",Name); //from Uses Minireg.pas
   Memo1.Text:=Name;
 end


Некак не могу понять или это из за глюков vmware всетаки специфическая сеть. Или еще какие нибудь привелегии иметь надо в коде и как ошибку поймать тоже не понимаю пока.


 
InfraRed   (2007-01-18 19:16) [14]

Vmware не причем. Тестировал на физической локалке функция:

RegOpenKeyEx(REMOT_KEY,PChar(edSubKey.text),0,KEY_QUERY_VALUE,SubKey)
не открывает ключи, Но соединение проходит ОК!

Функция  RegEnumKeyEx может перечислить ключи в только текущем HKEY_LOCAL_MACHINE

Так и не пойму чего еще нехватает?



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

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

Наверх




Память: 0.5 MB
Время: 0.059 c
15-1168889829
The X
2007-01-15 22:37
2007.02.04
Корректное отображение кириллицы в названиях разделов в CHMхелпах


2-1169152077
sinys
2007-01-18 23:27
2007.02.04
Почему-то происходит пересоздание формы


2-1169219514
Linu_X_oid
2007-01-19 18:11
2007.02.04
Объясните, пожалйста, как можно нормально создать чат в Delphi 7


2-1169060896
Pasha L
2007-01-17 22:08
2007.02.04
Ошибка Stream Read Error


15-1169009798
vidiv
2007-01-17 07:56
2007.02.04
подписать EXE