/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
String - Pchar
Fra : Arné


Dato : 05-01-01 09:13

Hej,

Jeg håber der er nogen der kan hjælpe mig med mit problem som jeg ikke
kan finde ud af.

Jeg har følgende (som jo er fejl)

procedure TForm1.Edit1Change(Sender: TObject);
var
EntryStr: string;


begin
EntryStr :='tall\' + Edit1.Text + '.wav';

sndPlaySound('EntryStr',
SND_NODEFAULT Or SND_ASYNC );
end;

end.

Det jeg jo ønskede var at når jeg for eksempel taster 4 i min textbox så
vil programmet spille 4.wav som ligger i undermappen tall. Det gør det
ikke, og jeg tror det er en konflikt af typen String & Pchar - uden at
jeg hverken er sikker på om det er rigtigt eller hvordan jeg fikser min
fejl. Håber nogen af dere kan hjælpe!
--
--
Med venlig hilsen
Arne

«...Put knot yore trust inn spel chequers »

 
 
N/A (05-01-2001)
Kommentar
Fra : N/A


Dato : 05-01-01 10:02



Arné (05-01-2001)
Kommentar
Fra : Arné


Dato : 05-01-01 10:02

In articleID <gFf56.5149$zH2.202233@news000.worldonline.dk>,
«Thomas Riedel, LogiHouse» says...
> Du har ' omkring EntryStr.
> Prøv med:
>
> sndPlaySound(pchar(EntryStr+#0),
> SND_NODEFAULT Or SND_ASYNC );
> - det virker!

WOW. Det var hurtig svar! Tak! Du aner ikke hvor længe jeg har grublet
over mit problem Det virker lige som jeg ønskede nu.

Med venlig hilsen
Arne

RoceKiller (07-01-2001)
Kommentar
Fra : RoceKiller


Dato : 07-01-01 17:55

On Fri, 5 Jan 2001 09:38:40 +0100,
"Thomas Riedel, LogiHouse" <thr@image.dk>
used 45 lines to tell us:

>Du har ' omkring EntryStr.
>Prøv med:

>sndPlaySound(pchar(EntryStr+#0), SND_NODEFAULT Or SND_ASYNC);

Hmm, der skal da ikke #0 bag ved, AFAIK sørger pchar selv for det, eller
tager jeg helt fejl?


Greetings
RoceKiller

--
{E-Mail: RoceKiller(at)trashcan.dk UIN: #36155647 IRC: #RK at Undernet}
"Livet er et sygehus, hvor hver eneste patient er besat af længslen
efter at bytte seng." Charles Baudelaire.

Niels (niLLer) (08-01-2001)
Kommentar
Fra : Niels (niLLer)


Dato : 08-01-01 15:54

Just as I expected, RoceKiller <RoceKiller@trashcan.dk> came up with
this:

>>sndPlaySound(pchar(EntryStr+#0), SND_NODEFAULT Or SND_ASYNC);
>
>Hmm, der skal da ikke #0 bag ved, AFAIK sørger pchar selv for det, eller
>tager jeg helt fejl?

Der er intet behov for en #0 bagerst, det er vist automatisk på en
string! Forskellen på en String og en PChar er at en string også har
en 32 bit længde og en 32 bit reference-count. Læs min artikel om
string på www.udvikleren.dk, spændende!

Niels (aka. niLLer)
--
e-mail: nmartin at iname dot com ICQ UIN: 50187323
http://xoasis.com/~niller/ - niLLer's pages (My programs, in English)
http://whitehat.dk/g4s/ - The G4S Page (Personlig side, på dansk)
-- I've been Windozed!

RoceKiller (09-01-2001)
Kommentar
Fra : RoceKiller


Dato : 09-01-01 16:03

On Mon, 08 Jan 2001 14:53:49 GMT,
nmartin@ispam.com (Niels (niLLer))
used 19 lines to tell us:

>Just as I expected, RoceKiller <RoceKiller@trashcan.dk> came up with
>this:

>>>sndPlaySound(pchar(EntryStr+#0), SND_NODEFAULT Or SND_ASYNC);

>>Hmm, der skal da ikke #0 bag ved, AFAIK sørger pchar selv for det, eller
>>tager jeg helt fejl?

>Der er intet behov for en #0 bagerst, det er vist automatisk på en
>string!

Hmm, en pchar ender på #0, men en string gør ikke. En string har så bare
en længde angivelse (i bit 0). En pchar derimod, starter på bit 0 og
ender med #0 (i sidste bit).

>Forskellen på en String og en PChar er at en string også har
>en 32 bit længde og en 32 bit reference-count.

Precis.

>Læs min artikel om string på www.udvikleren.dk, spændende!

Jeg læser alle nye artikler der, så den har jeg sikkert også læst. Jeg
syntes dog der sker for lidt der for tiden.


Greetings
RoceKiller

--
{E-Mail: RoceKiller(at)trashcan.dk UIN: #36155647 IRC: #RK at Undernet}
"Livet er et sygehus, hvor hver eneste patient er besat af længslen
efter at bytte seng." Charles Baudelaire.

Thomas Due (11-01-2001)
Kommentar
Fra : Thomas Due


Dato : 11-01-01 09:21

Ham der "RoceKiller" <RoceKiller@trashcan.dk> skrev :

[SNIP]

> >>Hmm, der skal da ikke #0 bag ved, AFAIK sørger pchar selv for det, eller
> >>tager jeg helt fejl?
>
> >Der er intet behov for en #0 bagerst, det er vist automatisk på en
> >string!
>
> Hmm, en pchar ender på #0, men en string gør ikke. En string har så bare
> en længde angivelse (i bit 0). En pchar derimod, starter på bit 0 og
> ender med #0 (i sidste bit).
>

Ja og nej. En ShortString bruger den første _byte_ til at angive længden. En
String er
en pointer til et hukommelsesområde. Der er ingen angivelse af længde på en
string.
Denne kan jo være længere end 255 karaktere. Derfor er det _ikke_ nødvendigt
at
angive en #0 specifikt.

String typen er dog speciel for Delphi/Pascal og hvis man skal anvende
f.eks. API kald
som bruger PChar (langt de fleste, der bruger strenge) er det nok at skrive
PChar(str)
hvor str er en String.

Der ud over har du ret at en PChar altid starter i position 0. Så en mere
korrekt måde
at få en string over i en PChar ville jo nok være :

Var pstr : PChar;
str : String;
Begin
str := 'Dette er en string';
pstr := StrAlloc(length(str)+1); // +1 for at sikrer der er plads til #0
StrPCopy(pstr, str);
// Gør et eller andet med PChar'en

StrDispose(pstr); // Nedlæg PChar'en
End;

Godt nok skriver Borland i deres hjælp at StrAlloc og StrDispose kun
eksisterere med
henblik på bagud kompatibilitet, så er PChar(str) reelt nok.

For lige kort at citere hjælpen for StrAlloc:

"Since long strings are implicitly null terminated and dynamically
allocated, the use of StrAlloc is in decline"

[SNIP]

Bare sådan for lige at få nogle ting på plads.

Mvh
Thomas



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste