Announcement

Collapse
No announcement yet.

Record in Pascal DLL in C++ verwenden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Record in Pascal DLL in C++ verwenden

    Hi allerseits!<br>
    Ich möchte einen Record, in einer Pascal DLL definiert ist in meiner C++ Anwendung verwenden.<br>
    Der Pascal Record in der DLL sieht folgendermassen aus:<br>
    <PRE>type
    Tteststrukt = record
    iVar : Integer; { 4 Byte }
    dVar : double; { 8 Byte }
    bVar : bool; { 1 Byte }
    sVar : Array[1..50] of char; { n * 1 Byte }
    end;</PRE>
    <br>
    <br>
    Die Struktur in C++, der die Daten übergeben werden sollten sieht so aus:<br>
    <PRE>typedef struct Ttest{
    int iVar; // 4 Byte
    double dVar; // 8 Byte
    bool bVar; // 1 Byte
    char sVar [50]; // n * 1 Byte
    }Tteststrukt;</PRE><br><br>

    Jetzt zu meinem Problem. Wenn ich in der C++ Anwendung auf die Struktur zugreife, dann funktioniert das mit dem Integer Wert. Alle andern Werte sind falsch. Der String ist um einige Stellen verschoben. So wie ich das sehe, stimmt was mit den Datengrössen nicht, allerdings habe ich die im TMTPascal-Compiler-spezifischen Grössen gesucht und mit den Grössen im C++ Builder verglichen (->Komentare bei den Struktur-definitionen).<br><br>

    Ich hoffe, jemand hier kann mir helfen, denn ich weiss echt nicht mehr weiter.<br>
    Gruss Michael

  • #2
    Hallo,

    siehe Text auf der Hilfeseite <b>Felder ausrichten</b>: <br><br>
    <i>
    Die Direktive $A steuert die Ausrichtung von Feldern in Record-Typen und Klassenstrukturen.

    Im Status {$A1} oder {$A-} werden Felder nicht ausgerichtet. Alle Records und Klassenstrukturen werden gepackt.

    Im Status {$A2} werden die ohne den Bezeichner packed deklarierten Felder in Record-Typen und die Felder in Klassenstrukturen auf Wortgrenzen ausgerichtet.

    Im Status {$A4} werden die ohne den Bezeichner packed deklarierten Felder in Record-Typen und die Felder in Klassenstrukturen auf Doppelwortgrenzen ausgerichtet.

    Im Status {$A8} oder {$A+} werden die <b>ohne</b> den Bezeichner <b>packed</b> deklarierten Felder in Record-Typen und die Felder in Klassenstrukturen auf Vierfachwortgrenzen ausgerichtet.

    Die Ausrichtung von Feldern in Record-Typen wird in der Delphi-Sprachreferenz beschrieben. Siehe Record-Typen.

    Variablen und typisierte Konstanten werden unabhängig von der Direktive $A immer für einen optimalen Zugriff ausgerichtet. Der Status {$A8} beschleunigt die Ausführung.

    <b>Vorgabe {$A8}</b>
    </i&gt

    Comment


    • #3
      Hi<br>
      Danke für deinen Hinweis.
      Ich verwende allerdings keinen Delphi Compiler, sondern den schon etwas in die Jahre gekommenen TMT-Pascal-Compiler. Die Optionen $A1-$A4 und $A8 gabs da noch nicht. $A+, $A- gibt es, aber mit keinem der beiden hats funktioniert.<br>
      <br>
      Ich weiss das ich wahrscheinlich im falschen Thread bin. Sorry. Bin über google hierher gekommen und hab ähnliche Probleme gesehen.<br>
      <br>
      Gruss Michae

      Comment


      • #4
        Zu den Stichwörtern Ausrichtung oder Alignment steht nichts in der Hilfe? Als Notlösung könntest du ja versuchen, auf der C++- oder Delphi-Seite mit Füllbytes zu arbeiten -- ist nicht schön, aber vielleicht funktioniert's wenigstens.
        <br>Uli

        Comment

        Working...
        X