Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   VBA Script in Delphi umsetzen (https://www.delphipraxis.net/177872-vba-script-delphi-umsetzen.html)

BUllweih 4. Dez 2013 08:09

AW: VBA Script in Delphi umsetzen
 
Hallo,

Also wenn ich aus

Delphi-Quellcode:
  For i := 1 To length(Data) do
   begin
     lCRC32 := (((lCRC32 shr 8) And $FFFFFF) Xor
       Crc32Table1[(lCRC32 and $FF) xor Ord(Data[i])]);
   end;
mache

Delphi-Quellcode:
  For i := 1 To length(Data) do
   begin
     lCRC32 := (((lCRC32 shr 32) And $FFFFFF) Xor
       Crc32Table1[(lCRC32 and $FF) xor Ord(Data[i])]);
   end;
bekomme ich das Ergebnis was auch VB bringt.

MfG
Michael

DeddyH 4. Dez 2013 08:24

AW: VBA Script in Delphi umsetzen
 
Wenn ich mich nicht täusche, müsste das aber
Delphi-Quellcode:
  For i := 1 To length(Data) do
   begin
     lCRC32 := Crc32Table1[(lCRC32 and $FF) xor Ord(Data[i])];
   end;
entsprechen, oder?

BUllweih 4. Dez 2013 08:28

AW: VBA Script in Delphi umsetzen
 
Wenn ich das tue bekomme ich wieder kompletten Käse gegenüber VB raus.:shock:

DeddyH 4. Dez 2013 08:31

AW: VBA Script in Delphi umsetzen
 
Dann habe ich wohl einen Denkfehler gemacht. Aber sehr merkwürdig, das Ganze :gruebel:

himitsu 4. Dez 2013 08:46

AW: VBA Script in Delphi umsetzen
 
Zitat:

Zitat von BUllweih (Beitrag 1238454)
Delphi-Quellcode:
  For i := 1 To length(Data) do
   begin
     lCRC32 := (((lCRC32 shr 32) And $FFFFFF) Xor
       Crc32Table1[(lCRC32 and $FF) xor Ord(Data[i])]);
   end;

Dann solltest du dringend mal das VBScript reparieren.

Delphi-Quellcode:
((lCRC32 shr 32) And $FFFFFF)
ist immer 0, denn lCRC32 ist 32 Bit und wenn man da den Inhalt um 32 Bit verschiebt, dann ist es leer, womit ein Großteil des CRCs verloren geht.
Vermute ich zwar weniger, aber scheint hier nahezuliegen, also im Problemfall könnte SHR auf die 32 allergisch reagieren und da eine Verschiebung von 0 machen.

Wie sieht es damit aus?
Delphi-Quellcode:
  For i := 1 To length(Data) do
   begin
     lCRC32 := ((lCRC32 And $FFFFFF) Xor
       Crc32Table1[(lCRC32 and $FF) xor Ord(Data[i])]);
   end;

[edit]
Das VBS ist Schrott und rechnet falsch.
Das liegt an der fehlerhaften Klammersetzung
Code:
  For i = 1 To Len(Data)
      lCRC32 = (((lCRC32 And &HFFFFFF00 \ &H100) And &HFFFFFF) Xor _
      Crc32Table((lCRC32 And &HFF) Xor AscW(Mid(Data, i, 1))))
Das, was ich schon profezeit hatte. Bei
Delphi-Quellcode:
(lCRC32 And &HFFFFFF00 \ &H100)
wird zuerst / und dann AND aufgelöst.
Also
Delphi-Quellcode:
(lCRC32 And (&HFFFFFF00 \ &H100))
, bzw.
Delphi-Quellcode:
(lCRC32 And &H00FFFFFF)
, statt dem beabsichtigten
Delphi-Quellcode:
((lCRC32 And &HFFFFFF00) \ &H100)
.



Entweder du reparierst die defekte VBS-Funktion oder du solltest diese Funktion umbenennen und im Delphi dann eine "gleich" falsch rechnende Funktion verwenden.

Der schöne Günther 4. Dez 2013 09:36

AW: VBA Script in Delphi umsetzen
 
Was bräuchte man denn, um als VBA-Laie das überhaupt zu testen und zu debuggen?

Eine normale Office-Installation? Irgendwas von einem aktuellen Visual Studio aus?

Morphie 4. Dez 2013 09:52

AW: VBA Script in Delphi umsetzen
 
Im Prinzip reicht ein Texteditor und eine Textdatei mit der Dateiendung .vbs ;-)
Ansonsten ja, eine Office-Installation reicht... Oder eben ein Visual Studio 6.0 für VB6 (alles was danach kam ist .NET und nicht mit diesem Code kompatibel)

BUllweih 4. Dez 2013 09:52

AW: VBA Script in Delphi umsetzen
 
Ich habe die Scripte von diesen Panel in Excel eingebaut und Teste dort alles.

himitsu 4. Dez 2013 10:05

AW: VBA Script in Delphi umsetzen
 
Ob/wie man VBScripts debuggen kann, weiß ich auch nicht,

aber das Rechenergebnis kann man hiermit testen
http://www.zorc.breitbandkatze.de/crc.html

So wie es aussieht, sollte es eine ganz normale CRC32-Implementierung werden, mit dem Polynom $4C11DB7, aber sie wurde im VBScript fehlerhaft implementiert.
Zumindestens wenn ich mir die ersten Ergebnisse des Delphi-Codes ansehe. Denn die Webseite liefert das selbe Ergebnis wie
Delphi-Quellcode:
testuser->B9851374
.

Wenn das VBScript korrekt gewesen wäre, hätte man hier garnichts neuentwickeln müssen, da viele fertige CRC32-Funktionen für Delphi schon mit diesem Polynom arbeiten oder dieses öfters einstellbar ist.

BUllweih 4. Dez 2013 10:19

AW: VBA Script in Delphi umsetzen
 
Zitat:

Zitat von himitsu (Beitrag 1238471)
Ob/wie man VBScripts debuggen kann, weiß ich auch nicht,

aber das Rechenergebnis kann man hiermit testen
http://www.zorc.breitbandkatze.de/crc.html

So wie es aussieht, sollte es eine ganz normale CRC32-Implementierung werden, mit dem Polynom $4C11DB7, aber sie wurde im VBScript fehlerhaft implementiert.
Zumindestens wenn ich mir die ersten Ergebnisse des Delphi-Codes ansehe. Denn die Webseite liefert das selbe Ergebnis wie
Delphi-Quellcode:
testuser->B9851374
.

Wenn das VBScript korrekt gewesen wäre, hätte man hier garnichts neuentwickeln müssen, da viele fertige CRC32-Funktionen für Delphi schon mit diesem Polynom arbeiten oder dieses öfters einstellbar ist.

Genau diese Hoffnung hatte ich ja am Anfang gehabt.
Dachte es sei eine ganz normale CRC32 Funktion, war aber Leider auf dem Holzweg.

Aber da diese Vermurkste Version schon in so vielen Panels verbaut ( Programmiert ) ist, muss ich wohl oder
übel das etwas andere Model in Delphi einbinden um nicht alles Plattformen updaten zu müssen. ( Was bei der Menge und Standorte nicht geht )

Also erst mal vielen Dank für die großartige Hilfe Eurer Seits.

MfG
Michael aka Bulli


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz