AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Records von Delphi in VB6 verwenden
Thema durchsuchen
Ansicht
Themen-Optionen

Records von Delphi in VB6 verwenden

Ein Thema von EWeiss · begonnen am 22. Feb 2015 · letzter Beitrag vom 23. Feb 2015
Antwort Antwort
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Records von Delphi in VB6 verwenden

  Alt 22. Feb 2015, 18:51
Da: (aber ich glaube, das hattet Ihr schon besprochen, oder?)

Die erste Type/Record.
Delphi-Quellcode:
type
    TAudioAttributes = packed record
        SampleCount: UInt64;
    end;
Code:
Public Type TAudioAttributes
    SampleCount  As Currency ' number of total samples
End Type
zweite Record
Delphi-Quellcode:
type
    TMPEGAudioAttributes = packed record
        Position: Int64; //* Position of header in bytes
        FrameCount: Int64; //* Total number of MPEG frames (by header)
        Bytes: Int64; //* Total bytes
    end;
Code:
Public Type TMPEGAudioAttributes
    Position     As Currency              '* Position of header in bytes
    FrameCount   As Currency              '* Total number of MPEG frames (by header)
    Bytes        As Currency              '* Total bytes
End Type
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Records von Delphi in VB6 verwenden

  Alt 22. Feb 2015, 19:03
Wenn ich mir Int64 und UInt64 ansehe, hätte ich schon fast gedacht, da müsste Int64 besser passen (Vorzeichen-Bit, aber ...

... Currency wird als Container für 8 Bytes ge(miss)braucht, von daher würde ich da auf jeden Fall mal Int64 gegen UInt64 bzw. Cardinal (das Gleiche in grün) tauschen.

Delphi-Quellcode:
type
    PMPEGAudioAttributes = ^TMPEGAudioAttributes;
    TMPEGAudioAttributes = packed record
        Position: UInt64; //* Position of header in bytes
        Header: DWord; //* The Headers bytes
        FrameSize: Integer; //* Frame's length
        Version: TMPEGVersion; //* MPEG Version
        Layer: TMPEGLayer; //* MPEG Layer
        CRC: LongBool; //* Frame has CRC
        BitRate: DWord; //* Frame's bitrate
        SampleRate: DWord; //* Frame's sample rate
        Padding: LongBool; //* Frame is padded
        _Private: LongBool; //* Frame's private bit is set
        ChannelMode: TMPEGChannelMode; //* Frame's channel mode
        ModeExtension: TMPEGModeExtension; //* Joint stereo only
        Copyrighted: LongBool; //* Frame's Copyright bit is set
        Original: LongBool; //* Frame's Original bit is set
        Emphasis: TMPEGEmphasis; //* Frame's emphasis mode
        VBR: LongBool; //* Stream is probably VBR
        FrameCount: UInt64; //* Total number of MPEG frames (by header)
        Quality: Integer; //* MPEG quality
        Bytes: UInt64; //* Total bytes
    end;
Edit

Ok, hört sich auch irgendwie nach Voodoo an (wenn ich so länger drüber sinniere).

Wie sind denn diese TMPEG... Typen definiert? Enums, Records, ...?
Bei Enums muss man aufpassen, denn die können unterschiedliche Byte-Längen haben (wenn man da nicht einwirkt).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (22. Feb 2015 um 19:14 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Records von Delphi in VB6 verwenden

  Alt 22. Feb 2015, 19:07
Zitat:
Da: (aber ich glaube, das hattet Ihr schon besprochen, oder?)
Ja
Aber wie gesagt Currency ist ja nur der vergleich Daten Type für UInt64 und Int64
Um den Record in der Größe gleichzuhalten muss ich einen Daten Type von 8 Bytes verwenden.

Auch wenn er signiert bzw. unsigniert nicht gleich ist mit den in Delphi deklarierten Typ
Currency = 6,312
Int64 = 63120

Das sind dann halt die Unterschiede.

Wie schon gesagt die Records sind voneinander getrennt warum er jetzt einmal UInt64 und Int64 verwendet?
Kein Ahnung..

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Records von Delphi in VB6 verwenden

  Alt 22. Feb 2015, 19:10
Zitat:
von daher würde ich da auf jeden Fall mal Int64 gegen UInt64 bzw. Cardinal (das Gleiche in grün) tauschen.
Danke werde ihm das mal vorschlagen da ich keinen zugriff auf dem Quelltext habe.

gruss

Geändert von EWeiss (22. Feb 2015 um 19:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Records von Delphi in VB6 verwenden

  Alt 22. Feb 2015, 19:17
Zitat:
von daher würde ich da auf jeden Fall mal Int64 gegen UInt64 bzw. Cardinal (das Gleiche in grün) tauschen.
Danke werde ihm das mal vorschlagen da ich keinen zugriff auf dem Quelltext habe.

gruss
Nee, das wird es wohl nicht sein, ich tippe eher mal auf die TMPEG... Typen. Was ist das, bzw. wie sind die deklariert? (s. Edit meiner Antwort)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Records von Delphi in VB6 verwenden

  Alt 22. Feb 2015, 19:19
Zitat:
Wie sind denn diese TMPEG... Typen definiert? Enums, Records, ...?
Bei Enums muss man aufpassen, denn die können unterschiedliche Byte-Längen haben (wenn man da nicht einwirkt).
Ich weis jetzt nicht welche du speziell meinst aber mal das hier.

t_TagsLibrary_GetAudioAttributes = function (Tags: HTags; AudioType: TAudioType; Attributes: Pointer): LongBool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};
Delphi-Quellcode:
type
    TAudioType = (atAutomatic, atFlac, atMPEG, atDSDDSF, atWAV, atAIFF, atMP4, atOpus, atVorbis, atWMA, atWAVPack, atMusePack);
Das TMPEGAudioAttributes hatten wir ja schon.

Delphi-Quellcode:
type
    TMPEGVersion = (tmpegvUnknown, tmpegv1, tmpegv2, tmpegv25);

    TMPEGLayer = (tmpeglUnknown, tmpegl1, tmpegl2, tmpegl3);

    TMPEGChannelMode = (tmpegcmUnknown, tmpegcmMono, tmpegcmDualChannel, tmpegcmJointStereo, tmpegcmStereo);

    TMPEGModeExtension = (tmpegmeUnknown, tmpegmeNone, tmpegmeIntensity, tmpegmeMS, tmpegmeIntensityMS);

    TMPEGEmphasis = (tmpegeUnknown, tmpegeNo, tmpege5015, tmpegeCCITJ17);
gruss

Geändert von EWeiss (22. Feb 2015 um 19:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Records von Delphi in VB6 verwenden

  Alt 22. Feb 2015, 19:22
Ich wette in VB hat ein Enum immer 4 Byte, in Delphi 1, 2 oder 4 Bytes

Hier mal der Link zur Doku.
http://docwiki.embarcadero.com/RADSt...n_%28Delphi%29

Ok, da es alles Enums sind, sage ich, das liegt zu 99,9999% an der Enum Größe
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Records von Delphi in VB6 verwenden

  Alt 22. Feb 2015, 19:26
Ich wette in VB hat ein Enum immer 4 Byte, in Delphi 1, 2 oder 4 Bytes
Ok, da es alles Enums sind, sage ich, das liegt zu 99,9999% an der Enum Größe
Die frage wäre dann wie ändern in Delphi?
Wüsste jetzt auf anhieb nicht wie ich das in VB casten soll.

Das würde auch erklären warum der zweite Record ungepackt genau so groß wie in VB ist. (88 Bytes)
Während der erste nur mit Packed Record funktioniert. Siehe Anlage.

Hmm.. jetzt wird es schwierig.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#9

AW: Records von Delphi in VB6 verwenden

  Alt 22. Feb 2015, 19:33
Die frage wäre dann wie ändern in Delphi?
Wüsste jetzt auf anhieb nicht wie ich das in VB casten soll.
Wenn du in Delphi noch einen "Fake"-Wert zum enum hinzufügst, und diesem dan Wert $3000000 oder so gibst, dann sollte Delphi für den enum auch vier Byte benötigen.
  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 08:59 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