![]() |
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:
|
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:
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:
Tndu_NDIS_TCP_LARGE_SEND_OFFLOAD_V1 = record
Encapsulation: ulong; MaxOffLoadSize: ulong; MinSegmentCount: ulong; TcpOptions: ulong; //TcpOptions:2; IpOptions: ulong; //IpOptions:2; end; [add] Zitat:
Code:
[color=silver]TcpOptions: LongBool;
IpOptions: LongBool;[/color] |
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. |
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: |
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:
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.
struct {
unsigned char highnibble: 4; unsigned char lownibble: 4; }; |
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 ![]() |
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; |
Re: C++ "..." ins Delphi Übersetzten
<stimme vom sesamstrassen-buchstaben-dealer> Genaauuuu </stimme vom sesamstrassen-buchstaben-dealer>
|
Re: C++ "..." ins Delphi Übersetzten
So erstmal danke für das bisherige ;-) aber es geht weiter ! ^^
Habe nun folgendes gefunden
Code:
und das
//
// 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) \ )
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:
Wie übersetzt ich das ins Delphi :-D ?
#if ((NTDDI_VERSION >= NTDDI_LONGHORN) || NDIS_SUPPORT_NDIS6)
.... #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) |
Re: C++ "..." ins Delphi Übersetzten
Code:
das ist ein Makro ... sowas kennt Delphi nicht.
// 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) \ ) 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:
... su kannst es natürlich auch selber ausrechnen und der Konstante den errechneten Wert zuweisen.
const {ConstName} = ({DeviceType} shl 16) or ({Access} shl 14) or ({Function} shl 2) or {Method};
Code:
#define xyz
#if xyz ... #endif
Delphi-Quellcode:
siehe OH :zwinker:
{$DEFINE xyz}
{$IFDEF xyz} ... {$ENDIF} |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 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