Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi C++ "..." ins Delphi Übersetzten (https://www.delphipraxis.net/98500-c-ins-delphi-uebersetzten.html)

OregonGhost 11. Dez 2007 19:39

Re: C++ "..." ins Delphi Übersetzten
 
Sind die Dinger mit den Doppelpunkten nicht Bitfelder? Also nicht wirklich zwei ULONGs, sondern je zwei Bit lange vorzeichenlose Integer :stupid:

himitsu 11. Dez 2007 19:47

Re: C++ "..." ins Delphi Übersetzten
 
Jupp (abgesehn von dem :2 )

vom inneren Speicheraufbau entspricht es ja genau Folgendem, aber mit dem Doppelrecord liegt es wenigstens nah an Windows seiner Definition, was logisch besser wäre.
Delphi-Quellcode:
Tndu_NDIS_TCP_LARGE_SEND_OFFLOAD_V1 = record
  Encapsulation: ulong;
  MaxOffLoadSize: ulong;
  MinSegmentCount: ulong;
  TcpOptions: ulong; //TcpOptions:2;
  IpOptions: ulong;  //IpOptions:2;
end;
wegen dem ...Options, im MSDN steh jedenfalls nur was von "A ULONG value that a miniport driver sets to indicate ...", also für'n Anfang würde ich es wohl auch erstmal so versuchen :stupid:

[add]
Zitat:

Zitat von OregonGhost
Sind die Dinger mit den Doppelpunkten nicht Bitfelder? Also nicht wirklich zwei ULONGs, sondern je zwei Bit lange vorzeichenlose Integer :stupid:

hmmm ... Bitfelder .... :gruebel: ... also BOOL/LongBool?
Code:
[color=silver]TcpOptions: LongBool;
IpOptions: LongBool;[/color]

Muetze1 11. Dez 2007 20:02

Re: C++ "..." ins Delphi Übersetzten
 
Naja, mit LongBool kommste nicht hin, weil das original laut Definition aus 2 Bits besteht. Somit haben sie 2^2 mögliche Kombinationen und nicht nur 2^1.

Die Definition besagt, diese Variable belegt nur Bit 0 und 1 und kann somit auch nur Werte zwischen 0 und 3 aufnehmen.

nitschchedu 11. Dez 2007 20:07

Re: C++ "..." ins Delphi Übersetzten
 
Wie sieht denn das nu im Delphi aus :gruebel: und wieso steht dann ulong da wenn dann durch das ":2" was anderes rauskommt ?
Die logig verstehe ich dahinter nicht ! :roll:

OregonGhost 11. Dez 2007 20:26

Re: C++ "..." ins Delphi Übersetzten
 
In C definiert man so eben Bitfelder. Man nimmt einen zugrundeliegenden Typ und teilt ihn in Bits auf. z.B.
Code:
struct {
  unsigned char highnibble: 4;
  unsigned char lownibble: 4;
};
ergibt eine Struktur, die ein Byte in Nibbles einteilt. Ich glaube, solange es alles passt und man den Typ zwischendurch nicht ändert, ergibt der Typ die Gesamtgröße. Du könntest also probieren, deine aufeinanderfolgenden Bitfelder als einen ULONG zu definieren, eigentlich müsste die Größe hinkommen.

Muetze1 11. Dez 2007 21:15

Re: C++ "..." ins Delphi Übersetzten
 
Beide Bitfelder liegen in einem LONG, somit einem LongWord. Dabei sind TCPOptions Bit 0 & 1 und IPOptions sind Bit 2 & 3.

Ansonsten nochmal kurz hier lesen.

himitsu 12. Dez 2007 09:21

Re: C++ "..." ins Delphi Übersetzten
 
mal wieder was Neues gelernt :shock:

also wenn die Beiden jetzt im Grunde in dem selben ULONG/LongWord drinliegen, dann sieht es wohl so aus :angel2:
Delphi-Quellcode:
type
  _NDIS_TCP_LARGE_SEND_OFFLOAD_V1 = record
    IPv4: record
      Encapsulation:  LongWord;
      MaxOffLoadSize: LongWord;
      MinSegmentCount: LongWord;
      Tcp_Ip_Options: LongWord;
    end;
  end;
  NDIS_TCP_LARGE_SEND_OFFLOAD_V1  = _NDIS_TCP_LARGE_SEND_OFFLOAD_V1;
  PNDIS_TCP_LARGE_SEND_OFFLOAD_V1 = ^_NDIS_TCP_LARGE_SEND_OFFLOAD_V1;

const
  TcpOptionsMask = $00000003;
  IpOptionsMask = $0000000C;

Muetze1 12. Dez 2007 09:56

Re: C++ "..." ins Delphi Übersetzten
 
<stimme vom sesamstrassen-buchstaben-dealer> Genaauuuu </stimme vom sesamstrassen-buchstaben-dealer>

nitschchedu 22. Dez 2007 13:39

Re: C++ "..." ins Delphi Übersetzten
 
So erstmal danke für das bisherige ;-) aber es geht weiter ! ^^

Habe nun folgendes gefunden

Code:
//
// Macro definition for defining IOCTL and FSCTL function control codes. Note
// that function codes 0-2047 are reserved for Microsoft Corporation, and
// 2048-4095 are reserved for customers.
//

#define CTL_CODE( DeviceType, Function, Method, Access ) (                 \
    ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
)
und das

Code:
#define _NDIS_CONTROL_CODE(request,method) \
            CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, request, method, FILE_ANY_ACCESS)

#define IOCTL_NDIS_QUERY_GLOBAL_STATS  _NDIS_CONTROL_CODE(0, METHOD_OUT_DIRECT)

und als weiteres

Code:
#if ((NTDDI_VERSION >= NTDDI_LONGHORN) || NDIS_SUPPORT_NDIS6)
....
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
Wie übersetzt ich das ins Delphi :-D ?

himitsu 22. Dez 2007 14:07

Re: C++ "..." ins Delphi Übersetzten
 
Code:
// Macro definition for defining IOCTL and FSCTL function control codes. Note
// that function codes 0-2047 are reserved for Microsoft Corporation, and
// 2048-4095 are reserved for customers.

#define CTL_CODE( DeviceType, Function, Method, Access ) (                 \
    ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
)
das ist ein Makro ... sowas kennt Delphi nicht.

entweder du machst eine Funktion draus
oder du rechnest es direkt aus.

zu Zweitem:
du könntest (was wohl am Besten sein wird) dieses direkt in der Konstante ausrechnen lassen:
mußt dann nur deine Konstantendefinition nach diesem Muster umsetzen
Delphi-Quellcode:
const {ConstName} = ({DeviceType} shl 16) or ({Access} shl 14) or ({Function} shl 2) or {Method};
... su kannst es natürlich auch selber ausrechnen und der Konstante den errechneten Wert zuweisen.

Code:
#define xyz

#if xyz
  ...
#endif
Delphi-Quellcode:
{$DEFINE xyz}

{$IFDEF xyz}
  ...
{$ENDIF}
siehe OH :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr.
Seite 3 von 4     123 4      

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