Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Header Übersetzung -> Delphi (https://www.delphipraxis.net/108301-header-uebersetzung-delphi.html)

Johnny_W 11. Feb 2008 08:12


Header Übersetzung -> Delphi
 
Hallo,

nun versuche ich mich gerade an einer Header Übersetzung und benötige Hilfe dabei.

Delphi-Quellcode:
typedef struct _tag_HIIDC* HIIDC;
....
HIIDC   IIDCAPI   iidc_open( long index );
Wie definiere ich so etwas denn in Delphi?
_tag_HIIDC ist nur in dieser Zeile zu finden.


viele Grüße

Tyrael Y. 11. Feb 2008 08:21

Re: Header Übersetzung -> Delphi
 
Musst noch suchen was HIIDC für ein record sein soll und wo es definiert ist.

Delphi-Quellcode:
type TTag_HIIDC = ^HIIDC;

function IIDC_OPEN(AIndex: Cardinal): HIIDC

Johnny_W 11. Feb 2008 08:47

Re: Header Übersetzung -> Delphi
 
Danke für den Tip, hat mir weitergeholfen ! :-D

Johnny_W 13. Feb 2008 13:33

Re: Header Übersetzung -> Delphi
 
Hallo nochmal,

Eine weitere Frage habe ich

Code:
typedef struct{
   long      total_frame;      
   long      newest_frameindex;   
} IIDC_TRANSFERINFO;
Code:
long   IIDCAPI   iidc_gettransferinfo( long h, IIDC_TRANSFERINFO* info, long infobytes );
Mein Ansatz sieht so aus :

Delphi-Quellcode:
type
  IIDC_TRANSFERINFO = record
    total_frame : LongInt; //Longint da -1 gesetzt werden könnte
    newest_frameindex : LongInt; //Longint da -1 gesetzt werden könnte
  end;

function iidc_gettransferinfo(h: Cardinal;var Info : IIDC_TRANSFERINFO;InfoBytes : Cardinal) : Cardinal;stdcall;

Da die Werte der Struktur nicht so sind wie Sie sein sollten frage ich sicherheitshalber nach, ob das so stimmt...

viele Grüße!

[edit=SirThornberry]delphi-tags durch c-tags ersetzt - Mfg, SirThornberry[/edit]

Tyrael Y. 13. Feb 2008 13:56

Re: Header Übersetzung -> Delphi
 
Die exakte Darstellung des C-Codes wäre folgendes...

Delphi-Quellcode:
type
  IIDC_TRANSFERINFO_P = ^IIDC_TRANSFERINFO;
  IIDC_TRANSFERINFO = record
    total_frame : LongInt; //Longint da -1 gesetzt werden könnte
    newest_frameindex : LongInt; //Longint da -1 gesetzt werden könnte
  end;

function iidc_gettransferinfo(h: Cardinal;Info : IIDC_TRANSFERINFO_P;InfoBytes : Cardinal) : Cardinal;stdcall;
das übergebene ist ein Pointer auf einen Record

Johnny_W 13. Feb 2008 14:01

Re: Header Übersetzung -> Delphi
 
Danke dir Tyrael Y.!

viele Grüße!

Remko 13. Feb 2008 17:56

Re: Header Übersetzung -> Delphi
 
var Info: IIDC_TRANSFERINFO is the same as Info: IIDC_TRANSFERINFO_P.
In Jedi translations we always use var instead of pointer unless nil is a valid value in which case type must be a pointer

Johnny_W 14. Feb 2008 07:52

Re: Header Übersetzung -> Delphi
 
Hallo da bin ich schon wieder....

Code:
typedef   struct
{
    BOOL             StdMode_Flag;
    struct
    {         
        DWORD        Buffer;              
    } Image;

    struct
    {
        WORD         UnitPos;
    } Ext;
} GETIMAGEINFO, *pGETIMAGEINFO;

Wie sieht denn das Delphi Konstrukt dazu aus?
Manchmal ist ein solches Konstrukt auch in einem Union.
Code:
typedef   struct
{
   union
   {
    struct
    {         
        DWORD        Buffer;              
    } Image;

    struct
    {
        WORD         UnitPos;
    } Ext;
   }u;
} GETIMAGEINFO, *pGETIMAGEINFO;

Ich sehe hier den Wald vor lauter Bäumen nicht...Hoffe mir kann jamand helfen.

Viele Grüße!

[edit=SirThornberry]Delphi-Tags durch c-Tags ersetzt - Mfg, SirThornberry[/edit]

Remko 14. Feb 2008 08:07

Re: Header Übersetzung -> Delphi
 
Delphi-Quellcode:
type
  GETIMAGEINFO = record
    StdMode_Flag: Boolean;
    Image: record
      Buffer: Cardinal;
    end;
    Ext: record
      UnitPos: WORD;
    end;
  end;
  TGetImageInfo = GETIMAGEINFO;
  PGetImageInfo = ^GETIMAGEINFO;
/edit: forgot ; after and of image and ext record ;-)

Johnny_W 14. Feb 2008 09:20

Re: Header Übersetzung -> Delphi
 
Thank you Remko the first struct example works!

So much stuff i did not do yet..wohoo.

best regardz

Johnny_W 24. Feb 2008 16:05

Re: Header Übersetzung -> Delphi
 
Hallo,

ich brauche wieder mal Hilfe bei der Übersetzung.
Der Union ist neu für mich und BYTE Abs:1<--- ist das hier ein Initialisierungswert, oder wie verstehe ich die Zahl?

Code:
typedef struct
{
DWORD Version;
DWord FeatureID; //Steht für den Typ z.b. Balance
union
{
    struct
    {
      BYTE Abs:1;
      WORD Value;
      float Abs_Value;
    } Std;

    struct
    {
      BYTE Abs:1;
      BYTE On_Off:1;
      BYTE Auto_M:1;
      float Abs_Value;
    } Balance;
    BOOL Exec_Flag;
    BOOL PowerOn_Flag;
} u;
}ZCL_GETFEATUREVALUE,
Das ist mein Versuch :
Delphi-Quellcode:
type
  ZCL_GETFEATUREVALUE= record
  Version : DWord;
  FeatureID : DWord;
  u : record
    case integer of
    0:
    (
      std : record
        Abs : Byte;
        Value : Word;
        Abs_Value : Single;
      end;
    );
    1:
    (
      Balance : record
        Abs : Byte;
        On_Off: Byte;
        Auto_M: Byte;
        Abs_Value : single;
     
      end;
    );
    Exec_Flag : bool;
    PowerOn_Flag : bool;
  end;
end;
Der Record wird an eine Funktion übergeben, die diesen je nach FeatureID "füllt" .

Ist dieser Funktion durch den Aufbau des Records "u" bekannt, welche Inneren Records mit Werten belegt werden müssen,
oder wie kann ich das verstehen?

Viele Grüße!

Johnny_W 25. Feb 2008 17:12

Re: Header Übersetzung -> Delphi
 
Ich schiebe das Thema mal dezent hoch. :)

viele Grüße!

halinchen 25. Feb 2008 17:33

Re: Header Übersetzung -> Delphi
 
Zitat:

Zitat von Johnny_W
Der Union ist neu für mich und BYTE Abs:1<--- ist das hier ein Initialisierungswert, oder wie

Das ist ein Bitfeld. Sowas gibt es in Delphi meines Wissens nicht. Es dient nur zur Datenkomprimierung und müsste in Delphi weggelassen werden können. (Solange die Daten nicht extern verwendet werden, also an ein Gerät geschickt werden, etc.)

Aber 100% sicher bin ich mir nicht.

Mit Unions habe ich noch nicht gearbeitet und habe keine Ahnung.

Johnny_W 27. Feb 2008 06:39

Re: Header Übersetzung -> Delphi
 
Danke Dir Halinchen,

dann bekomme ich das mit Bitmasken dementsprechend schon hin.
Na dann sitze ich wenigstens nicht alleine im Boot, was Unions anbetrifft. :)

viele Grüße!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 Uhr.

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