AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Move Anweisung

Ein Thema von MrSpock · begonnen am 1. Nov 2010 · letzter Beitrag vom 1. Nov 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.549 Beiträge
 
Delphi 12 Athens
 
#1

AW: Move Anweisung

  Alt 1. Nov 2010, 20:31
Jupp, System.Move arbeitet byteweise, aber eventuell konvertiert Sage CL die Datensätze.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Move Anweisung

  Alt 1. Nov 2010, 20:43
Hallo himitsu,

danke erstmal.

Bin jetzt einen Schritt weiter. Noch tiefer unten im Sumpf der COM-Objekte gibt es Anweisungen der Form:

Delphi-Quellcode:
procedure myKHKbinRead (ObjFileIO : _CFileIO;
           ichannel,
                        ikeyOffset : SmallInt;
              sKey :WideString;
                        sbuffer :Pchar;
                        var irecNb: LongInt);
var
   StrBuffer : AnsiString;
begin
   ObjFileIO.objFile(iChannel).binRead (ikeyOffset ,sKey, irecNb);
   strBuffer := ObjFileIO.objFile(iChannel).strGetFieldBuffer
      (1,ObjFileIO.objFile(iChannel).lngRecordLen);
   if irecNb > 0 then
      Move(StrBuffer[1],sBuffer^,ObjFileIO.objFile(iChannel).lngRecordLen);
end;
Der StrBuffer war bisher als String definiert. Die Funktion ObjFileIO.objFile(iChannel).strGetFieldBuffer gibt aber einen WideString zurück (wie bei COM Objekten üblich). Hier wurde also früher die Konvertiereung zurück in "Small" Strings durchgeführt. Jetzt habe ich dort String durch AnsiString ersetzt (und in allen anderen Lesefunktionen auch) und jetzt sieht es gleich wieder besser aus, wenn ich auch in TCl4_a10110 alle Strings durch AnsiStrings ersetze.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.549 Beiträge
 
Delphi 12 Athens
 
#3

AW: Move Anweisung

  Alt 1. Nov 2010, 20:57
Wenn du jetzt Unicode zur Verfügung hast, dann könntest du dieses ja nun auch nutzen?

Also alles zurück auf String und dann vermutlich noch diese Stelle anpassen:
Move(StrBuffer[1], sBuffer^, ObjFileIO.objFile(iChannel).lngRecordLen * SizeOf(Char)); Also ich hätte hier erwartet, daß die letzte Hälfte der Datensätze unter Unicode fehlt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Nov 2010 um 21:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Move Anweisung

  Alt 1. Nov 2010, 21:15
Nein, das funktioniert so nicht, weil in dem Record ja auch andere Typen sind. Wenn ich nicht die Rückverwandlung in kurze Strings durchführe, weiß ich nicht, was mit den anderen Typen bei der Übergabe passiert. Wie gesagt intern arbeitet die CL weiterhin mit 1 Byte Char.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.549 Beiträge
 
Delphi 12 Athens
 
#5

AW: Move Anweisung

  Alt 1. Nov 2010, 21:27
OK, der TCl4_a10110 bestand ja nur aus Char, da wäre es gegangen.

Also, aus einem Delphi-Referenz durchsuchenByte würde ein Delphi-Referenz durchsuchenWord, aber größere Typen würden nicht funktionieren

Word würde so zu LongWord, aber aus $xxyy würde $00xx00yy

Wobei ich bei allen Werten über $7f, 127 und #127 aufpassen würde, da diese bei einer Unicode>Ansi-Umwandlung zerstört werden könnten, wenn eine andere Codepage genutzt würde, welche genutzt wurde, um auf der anderen Seite der COM-Schnittstelle die Bytes nach WideString zu konvertieren.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:26 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