Search  
Thursday, May 24, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Win32 API  NELAMURIRE...
 NELAMURIRE
 
 9/20/2011 11:57:53 PM
User is offlineSCHRECK
157 posts
5th


NELAMURIRE
 (N/A)
Am scris un program care citeste valori de tip REG_DWORD din registri, il converteste in variabile de tip
numeric pe care VFP il poate afisa. Totul merge bine dar am o nelamurire.

Am folosit functia API RegQueryValue(...,numecheie,...,REG_DWORD,@valoareareturnata,....)

valoareareturnata este un cuvant pe patru bytes pe care vfp nu-l poate afisa, prin urmare trebuia
sa folosesc o functie care converteste variabila 'valoareareturnata' intr-o variabila de tip numeric pe care VFP
il poate afisa. Am gasit pe net o functie care face acest lucru, am implementat in program si functioneaza.

nValoare=StrToLong(valoareareturnata)

FUNCTION StrToLong
PARAMETERS cLongStr
LOCAL nLoopVar,nRetVal

nRetval=0
FOR nLoopVar=0 TO 24 STEP 8
nRetVal=nRetVal+(ASC(cLongStr)*(2^nLoopVar))
ClongStr=RIGHT(cLongStr, LEN(cLongStr)-1)
NEXT
RETURN nRetVal

Problema este ca nu inteleg cum functioneaza aceasta functie
Neintelegerea provine din faptul ca nu stiu cum este reprezentata data in cei 4 bytes.
Inteleg ca de fapt este un string

Ma poate lamuri cineva?
Asi dori printr-un exemplu
presupunem ca cheia de tip REG_DWORD are valoarea 0x00000007(7)
in acest caz nvaloare=7

Ce valori vor contine cei 4 Bytes si cum functioneaza functia (algoritmul)?
Multimesc
 9/21/2011 10:55:59 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: NELAMURIRE
 (N/A)
Byte3 = 00
Byte2 = 00
Byte1 = 00
Byte0 = 07

Valoare = Byte3 * 255^3 + Byte2 * 255^2 + Byte1 * 255^1 + Byte0 * 255^0

255 este valoarea maxima care poate fi stocata intr-un byte, iar puterea este data de pozitia byte-ului in sir. Numaratoarea se face de la dreapta la stanga (cel mai putin reprezentativ este in dreapta).

Algoritmul este folosit si de functia RGB() pentru a calcula valoarea numerica rezultata din cele trei componente ale culorii. Algoritmul se invata la scoala, in clasa a 6-a, mi se pare, cand se studiaza bazele de numeratie (conversia din baza 2 in baza 10 si invers).

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 9/26/2011 10:16:45 PM
User is offlineovidiu cucu
57 posts




Re: NELAMURIRE
 (N/A)

O mica observatie:
O valoare tip REG_DWORD din registry este un DWORD.
In Windows SDK, DWORD este un alias pentru unsigned long int, este un intreg si nu un string, asa ca nu ai nevoie de nici o conversie.


Ovidiu Cucu
Microsoft MVP
Cofondator CODEXPERT.RO
  Visual FoxPro  Win32 API  NELAMURIRE...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement