Autor Beitrag
ShadowThief
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Do 24.07.03 12:51 
kann mir mal bitte jemand erklären, warum man

ausblenden Delphi-Quelltext
1:
2:
str := 'getZ';
FileStream.Write(str[1], Length(str));


schreiben muss, also warum str[1] ?

thx.
shadow.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 24.07.03 13:08 
Wahrscheinlich weil die Funktion einen Pointer auf einen Speicherbereich erwartet und keinen String!

Gruß
Tino
ShadowThief Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Do 24.07.03 13:44 
ich frag mich nur so, warum delphi 7 bei mir da eine warnung ausgibt,
bei der zeile.

[Warnung] form_Main.pas(324): Unsicherer Code 'String index to var param'

ähm, ich möcht halt keinen unsicheren code schreiben, keine ahnung
wie ich das sicher schreiben kann, ihr?

thx.
shadow.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Do 24.07.03 14:08 
Ich weiß nicht ob das deinem Compiler besser gefällt ;) aber es ginge auch so:
ausblenden Delphi-Quelltext
1:
FileStream.Write(Pointer(str)^, Length(str));					

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Do 24.07.03 14:34 
Ja, das gefällt dem Compiler besser.
Und TFilestream.Write will auch keinen Pointer haben, sondern einen Buffer, den es direkt schreibt. Daher wäre auch ein Write(str, Length(str)) falsch, wenn str ein LongString ist, weil das ja nur ein Pointer ist. Mit dem Pointer(str)^hat man einen PChar, den man dereferenziert, also einen C-String ohne führender Längenbezeichnung, ohne Pointe.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
ShadowThief Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Do 24.07.03 16:12 
ne gefällt ihm auch net besser:

[Warnung] form_Main.pas(121): Unsicherer Typ 'Pointer'
Eisenherz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Do 24.07.03 17:18 
ShadowThief hat folgendes geschrieben:
ne gefällt ihm auch net besser:

[Warnung] form_Main.pas(121): Unsicherer Typ 'Pointer'


Ich vermute, dass du mit Delphi 7 arbeitest.
Mit Delphi 7 kann man auch Anwendungen für .NET machen. Deswegen gibt es diese Warnung. So weit ich weiß, kann man in den Projektoptionen einstellen, dass keine .NET-Warnungen ausgegeben werden sollen. Da ich selbst kein Delphi 7 habe, kann ich dir nicht genauer sagen, wo man das abstellt.

_________________
aloa Eisenherz
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Do 24.07.03 17:27 
hast du an das ^ gedacht?

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Do 24.07.03 18:40 
@tommie-lie: str[1] und PChar(str]^ sind eigentlich genau dasselbe! Beide Codes geben das erste Zeichen des Strings zurück! Die Methode Write nimmt einen const-Parameter, solche Parameter werden intern auch nur als Referenz übergeben, daher funzt Write(str, Length(str)) auch nicht, da ein LongString eben nur ein Pointer ist und daher nur die 4 Bytes des Pointers geschrieben werden.
Nachdem das .NET-Framework nach einem ähnlichen Prinzip wie Java funktioniert gibt es unter .NET auch keine Pointer (auch keine PChars) mehr - daher auch die Warnung "Unsicherer Typ".

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Do 24.07.03 19:58 
Motzi hat folgendes geschrieben:
@tommie-lie: str[1] und PChar(str]^ sind eigentlich genau dasselbe! Beide Codes geben das erste Zeichen des Strings zurück!

Letzteres ist mir bekannt...
Ich nehm' trotzdem immer PChar(str)^ :-)

Zitat:
daher funzt Write(str, Length(str)) auch nicht, da ein LongString eben nur ein Pointer ist und daher nur die 4 Bytes des Pointers geschrieben werden.

Ja, das sagte ich bereits ;-)

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
ShadowThief Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Fr 25.07.03 08:58 
ok, danke für die erklärungen.

aber ..... es muss doch ne möglichkeit geben, diesen code "sicher" zu schreiben. ich halte es für keine lösung, die warnungen zu unterbinden, wenn welche kommen. wenn, dann möchte ich portablen code schreiben, ich meine, die werden sich schon was dabei gedacht haben, diese warnung rauszuhaun.
Eisenherz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Fr 25.07.03 13:26 
ShadowThief hat folgendes geschrieben:
aber ..... es muss doch ne möglichkeit geben, diesen code "sicher" zu schreiben. ich halte es für keine lösung, die warnungen zu unterbinden, wenn welche kommen. wenn, dann möchte ich portablen code schreiben, ich meine, die werden sich schon was dabei gedacht haben, diese warnung rauszuhaun.


Ich habe mich noch nicht näher mit .NET befasst, aber ich vermute, dass es sehr schwer sein wird Code zu schreiben, der sowohl für das "normale" Windows als auch für .NET geeignet ist. Wenn du das trotzdem möchtest, dann musst du mit dem kleinsten gemeinsamen Nenner leben (was schwer sein dürfte) oder du arbeitest mit bedingter Compilierung.
Wenn du nur für das "normale" Windows entwickeln willst, dann ist es auch O.K., wenn du die .NET-Warnungen abschaltest. Besser gesagt, dann solltest du die .NET-Warnungen abschalten, da sie sonst nur unnötige Verwirrung stifften.

_________________
aloa Eisenherz
ShadowThief Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Fr 25.07.03 13:42 
es ist ja so, dass ich irgendwann vorhabe auf delphi.NET umzusteigen.
deswegen versuche ich meinen code halt dementsprechend zu schreiben.

in .NET gibt es ja die lustigste VCL immer noch, und streams sind doch
ein teil der VCL. da muss es ja wohl irgendwie gehn, oder?

auch auf die gefahr hin, dass ich euch damit jetzt n weng nerve, oder so,
aber ... dateien schreiben ist ja wohl eines der wichtigste dinge, dies so
gibt in der programmierung, und ich kann mir nicht vorstellen, dass
borland sein delphi in die .NET-familie reinschickt, wenn solche grund-
liegenden dinge nicht irgendwie, ja ähm standardisiert sind.

es ist ja so, dass viele firmen sich überlegen, von delphi auf delphi.NET
umzusteigen, und die möchten dann bestimmt nicht ihre ganzen progs
umcoden, kann ich mir denken.

artet jetzt vielleicht in ne grundsatzdiskussion aus, aber ...
ja nix aber.

sers.
shadow.
Eisenherz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Fr 25.07.03 14:23 
Ich könnte mir vorstellen, dass du im Forum des Entwicklers (http://www.entwickler-forum.de/webx?13@34.m04FaUXJfXT^6@.ee6b9c4) bessere Changen hast dazu kompetente Meinungen zu hören. Dort geistert u.a. ein Autor herum, der ein Buch zun .NET und Delphi geschrieben hat.

_________________
aloa Eisenherz
ShadowThief Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Fr 25.07.03 14:32 
ok, mal sehn.
vielen dank einstweilen.