AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Verständnisfrage: String nach Pointer kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisfrage: String nach Pointer kopieren

Ein Thema von gmc616 · begonnen am 30. Jan 2013 · letzter Beitrag vom 30. Jan 2013
Antwort Antwort
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Verständnisfrage: String nach Pointer kopieren

  Alt 30. Jan 2013, 15:43
Jupp, richtig verstanden.

Jetzt sagt mir der Complier:
Code:
[DCC Fehler] Unit1.pas(117): E2010 Inkompatible Typen: 'PWideString' und 'WideString'
Dann mach noch'n Haken hin: PWideString(APointer)^ := AText;
Uli Gerhardt
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Verständnisfrage: String nach Pointer kopieren

  Alt 30. Jan 2013, 16:24
Die Idee hatte ich auch.
Jetzt bekomme ich eine EOutOfMemory-Exception mit "Zu wenig Arbeitsspeicher."

Mein Test-Code aktuell:
Delphi-Quellcode:
procedure fktCopy (APointer : Pointer ; AText : WideString);
  begin
   // CopyMemory(APointer,PChar(AText),2*length(AText)+1);
    PWideString(APointer)^ := AText;
  end;
var
  sStr , sData : WideString;
  pStr : Pointer;
begin
  sData := '123';
  sStr := 'Hallo Welt';
  pStr := PWideChar(sStr);

  fktCopy (pStr,sData);

  ShowMessage (sStr);
Ändere ich alle WideString in String und alle PWideChar in PChar, was mir lieber wäre, komme ich eine Schutzverletztung.

Das geht mir nicht in den Kopf
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Verständnisfrage: String nach Pointer kopieren

  Alt 30. Jan 2013, 16:43
Ändere mal  pStr := PWideChar(sStr); in   pStr := @sStr; ab. Du willst ja nicht casten, sondern die Adresse deiner Variablen übergeben.
Uli Gerhardt
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Verständnisfrage: String nach Pointer kopieren

  Alt 30. Jan 2013, 17:04
Du machst try and error ohne nachzudenken. Glaub mir, das wird nix.
Ja, mittlerweile schon.

Ändere mal  pStr := PWideChar(sStr); in   pStr := @sStr; ab. Du willst ja nicht casten, sondern die Adresse deiner Variablen übergeben.
Das ist die Lösung!

Ich dachte mal gelesen zu haben, das PChar(sStr) und @sStr das gleiche wären, ist es aber offensichtlich nicht.

BonusFrage: Aber PChar(sStr) und @sStr[1] ist das gleiche oder?
Das würde mir meinen Denkfehler erklären ...

Danke euch für die Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Verständnisfrage: String nach Pointer kopieren

  Alt 30. Jan 2013, 17:11
BonusFrage: Aber PChar(sStr) und @sStr[1] ist das gleiche oder?
Halbwegs - wenn sStr = '' ist, müssten sie sich unterscheiden. Aber die Regel ist ganz einfach: Wenn du nicht genau weißt, was du tust, nimm PChar(sStr) statt @sStr[1] .
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Verständnisfrage: String nach Pointer kopieren

  Alt 30. Jan 2013, 16:47
Du hast einen Widestring. Der hat eine feste länge im Speicher. Und daran kannst du mit deinen Speicherkopieraktionen nichts ändern. Du müsstest schon die Länge aktiv ändern. Das geht aber nicht mehr, wenn du nicht mehr weißt, auf was dein Zeiger eigentlich zeigt.

Achso und Delphi(Compiler) beschwert sich natürlich nicht bei deinen Kopieraktionen. Der kopiert einfach (wie in ANSI C) aber du musst wissen was du tust.


Edit:
Zitat:
Ändere ich alle WideString in String und alle PWideChar in PChar, was mir lieber wäre, komme ich eine Schutzverletztung.
Du machst try and error ohne nachzudenken. Glaub mir, das wird nix.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz