vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Funktion von C++ nach VB 
Autor: NeoInferno
Datum: 14.07.05 14:14

Hi,
zuerst hatte ich vor, eine C++ Funktion per DLL nach VB zu exportieren. Da dies einfach nicht funktioniert, möchte ich diese Funktion nun komplett in VB schreiben, was an sich möglich ist.
C++ Funktion
short DLLEXPORT getipchecksum(string data, uint len) {
    ushort  checksum    = 0;
    ushort  toadd       = 0;
 
    // Summen der 16-bit Words
    for (uint i = 0; i < len-1; i += 2) {
        toadd = static_cast<ushort>( data | data[i+1] << 8);
        checksum += toadd;
        checksum += (toadd > checksum);
    }
 
    if (len & 0x1) {
        toadd = static_cast<ushort>(data[len-1]);
        checksum += toadd;
        checksum += (toadd > checksum);
    }
 
    return htons( static_cast<ushort>(~checksum) );
}
(htons kehrt übrigens einfach die beiden Bytes des 2-byte Wertes um)

Meine vorläufige und fehlerhafte VB Funktion
Public Function GetIPChecksum(ByVal Data As String) As Integer
Dim Checksum As Integer, ToAdd As Integer, n As Long
Dim sh As Long
Dim b1 As Integer, b2 As Integer
 
'Summe der 16-bit Words
For n = 1 To Len(Data) Step 2
    b1 = Asc(Mid$(Data, n, 1))
    sh = ShiftL(Asc(Mid$(Data, n + 1, 1)), 8)
    If sh < 32768 Then b2 = sh Else b2 = 32768 - sh
    ToAdd = b2 Or b1
    Checksum = Checksum + ToAdd
    If ToAdd > Checksum Then Checksum = Checksum + 1
Next n
 
If Len(Data) And &H1 Then
    ToAdd = Asc(Mid$(Data, Len(Data) - 1, 1))
    Checksum = Checksum + ToAdd
    If ToAdd > Checksum Then Checksum = Checksum + 1
End If
 
GetIPChecksum = Checksum
 
End Function
Fehler die offensichtlich sind (in der VB Funktion):
- ShiftL hat desöfteren einen Überlauf, Integer ist zu klein
- am Ende fehlt das Komplement der Summe

Hoffentlich hat jemand Ahnung von beiden Sprachen und kann bei der Fehlersuche in meinem Code helfen.

Gruß,
Neo
0
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Funktion von C++ nach VB814NeoInferno14.07.05 14:14
Re: Funktion von C++ nach VB384BasTler14.07.05 15:12
Re: Funktion von C++ nach VB380NeoInferno14.07.05 16:36
Re: Funktion von C++ nach VB407Radeonmaster14.07.05 19:43

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel