26. september 2000 - 09:54Der er
3 kommentarer og 1 løsning
Cardinal, Pointer, Pchar
Er der en eller anden som kan forklare mig hvad Cardinal, Pointer og Pchar betyder og hvornår og hvordan man kan bruge disse begreber. Jeg har allerede læst i hjælpe filen, men forstod mildest talt ikke en brik af det. Jeg vil meget gerne have en masse eksempler på nogle koder (da jeg er lidt tungnem *gg*)...
Med version 7 af TeamShare tager Lector næste skridt og bygger en platform for AI-agenter, der i højere grad kan følge medarbejderen gennem hele arbejdsprocessen.
sådan står der i online hjælpen hvis du slår ordet cardinal op.
Cardinal 0..4294967295 unsigned 32-bit
i modsætning til en integer kan den ikke indeholde negative tal, men tilgengæld kan den så rumme et tal der er dobbelt så stort. Altså alle heltal far 0 til og med 4294967295 (godt 4,2 milliarder)
En pointer betyder en peger hvis du oversætter det direkte til dansk. Den peger på noget. I programmerings verden peger den på en datatype. En pointer er basalt set blot en integer. I dne integer skriver man memory adressen hvor på den data type du peger på ligger ..
Feks :
type TMinType = class(TObject) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;
så erklærer du dig sådan en fætter :
procedure Hest; var MinType : TMinType; MinType1 : TMinType; p : Pointer; begin MinType := TMinType.Create; p := MinType; MinType1^ := p; end;
Nu er det to variabler ens !
En Pchar er en pointer til et NULL termineret array of chars. Snak dansk forhelvede og kom med noget brugbart !
Jo ser du en array of chars kan fx. se sådan ud : [#32,#33,#34,#35,#36,#0] som du ser er dette array NULL termineret, mens det følgende ikke er : [#32,#33,#34,#35,#36]
en PChar indeholder simpelthen adressen på den første karekter i arrayet. Når du bruger den som parameret til en funktion forventer funktionen at arrayet er NULL termineter, som i det første eksempel. Den vel således blivee ved med at læse i hukommelsen til den møder karekteren #0 og så opfatte det som en streng.
Datatypen findes i Delphi bla. for at gøre det muligt at kalde funktioner nede i DLL filer skrevet i C++, fordi C++ ikke som standard indeholder en pendant til Delphis String type.
\"Jammen jeg er sq da lige glad med jeres C++, jeg er igang med Delphi\" ... Joeee men Windows er skrevet i C++, og når du programmerer kalder du tit windows. Måske ikke direkte selv, men så gør Delphis bibloteker det for dig ....
Cardinal bruges til lagering af store tal på relativ lidt plads. Alternativet er en 64 bits datatyper som fyldermere og performance messigt er en dårlig forretning. Nogle funktions kald kræver disideret en Cardinal eller en pointer til en Cardinal in som paramerer. Fx. GetComputername i Wndows API\'en ... Et kald til den kan fx. udformes som følger :
Function GetComputerName : String; var Size : Cardinal; begin Size := MAX_PATH; SetLength(Result, MAX_PATH); Windows.GetComputerName(PChar(Result),Size); SetLength(Result, Pred(Pos(#0,Result))); end;
En cardinal i C++ werden hedder en DWORD og så du i hjælpen der noget alla dette
BOOL GetComputerName(
LPTSTR lpBuffer, // address of name buffer LPDWORD nSize // address of size of name buffer );
betyder det at du skal først erklære dig en forekomst så så komme den ind i funktions kaldet. præcis som vist ..
pointere .. hvis du fx. vil oprette en liste af brugere til dit system vil du nok basere den på en TList ...
man kunne forestille sig en datatype TUser som den her :
pUser = ^TUser; //^TUser betyder en pointer til en TUser struktur TUser = Record UserName: String[255]; Password: String[255]; end;
Nå så du vil tilføje sådan en fætter til din liste så gør noget alla det her :
Procedure TUserList.Add(const User : TUser); var aUser : pUser; begin aUser := new (pUser); aUser^.UserName := User.UserName; aUser^.Password := User.Password; inherited Add(aUser); end;
Kode stumpen er taget ud fra et stører eksempel der viser hvordan man laver en krypteret liste ...
Nå du sk kopiere filer kalder du direkte ned i Windows og da API\'en ikke kender til pascal Strings er du nødtil at bruge C++ verden og det vil sige PChars.
Et eksemple på hvordan man bruger PChar så kig på mit svar på dit andet spørgsmål ...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.