Delphi-PRAXiS
Seite 3 von 8     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi WLan API Übersetztung ? (https://www.delphipraxis.net/79162-wlan-api-uebersetztung.html)

ste_ett 19. Okt 2006 15:09

Re: WLan API Übersetztung ?
 
Die Definition für einige Typen fehlt.
z.B. "TnduDot11_SSID"


Du solltest packed records benutzen.

Delphi-Quellcode:
Txyz = packed record
  Name: Typ;
end;

nitschchedu 19. Okt 2006 15:22

Re: WLan API Übersetztung ?
 
Hier mal alle Typen

Delphi-Quellcode:

PnduDot11_SSID = ^TnduDot11_SSID;
  TnduDot11_SSID = record
    uSSIDLength: ULONG;
    ucSSID: array [0..NDU_DOT11_SSID_MAX_LENGTH] of UCHAR;
  end;

  TnduDot11_Mac_Address = record
    ucDot11MacAddress: array [0..6] of UCHAR;
  end;

  TnduDot11BssType = (dot11_BSS_type_infrastructure = 1,
    dot11_BSS_type_independent = 2,
    dot11_BSS_type_any = 3);

  TnduDot11PhyType = (dot11_phy_type_unknown = 0,
    dot11_phy_type_any = dot11_phy_type_unknown,
    dot11_phy_type_fhss = 1,
    dot11_phy_type_dsss = 2,
    dot11_phy_type_irbaseband = 3,
    dot11_phy_type_ofdm = 4,
    dot11_phy_type_hrdsss = 5,
    dot11_phy_type_erp = 6,
    dot11_phy_type_IHV_start = $80000000,
    dot11_phy_type_IHV_end = $ffffffff);

  TnduWLanRateSet = record
    uRateSetLength: ULONG;
    usRateSet: array [0..NDU_DOT11_RATE_SET_MAX_LENGTH] of SHORT;
  end;

  TnduWLanBSSEntry = record
    dot11Ssid: TnduDot11_SSID;
    uPhyId: ULONG;
    dot11Bssid: TnduDot11_Mac_Address;
    dot11BssType: TnduDot11BssType;
    dot11BssPhyType: TnduDot11PhyType;
    lRssi: Longint;
    uLinkQuality: ULONG;
    bInRegDomain: Boolean;
    usBeaconPeriod: SHORT;
    ullTimestamp: LONGLONG;
    ullHostTimestamp: LONGLONG;
    usCapabilityInformation: SHORT;
    ulChCenterFrequency: ULONG;
    wlanRateSet: TnduWLanRateSet;
    ulIeOffset: ULONG;
    ulIeSize: ULONG;
  end;

  PnduWLanBSSList = ^TnduWLanBSSList;
  TnduWLanBSSList = record
    dwTotalSize: DWORD;
    dwNumberOfItems: DWORD;
    wlanBssEntries: TnduWLanBSSEntry;
  end;

Code:
#define DOT11_SSID_MAX_LENGTH  32      // 32 bytes
typedef struct _DOT11_SSID {
#ifndef __midl
    __range(0,32)
#endif
    ULONG uSSIDLength;
    UCHAR ucSSID[DOT11_SSID_MAX_LENGTH];
} DOT11_SSID, * PDOT11_SSID;


// These are needed for wlanapi.h for pre-longhorn targets
#ifdef __midl
    typedef struct _DOT11_MAC_ADDRESS {
        UCHAR ucDot11MacAddress[6];
    } DOT11_MAC_ADDRESS, * PDOT11_MAC_ADDRESS;
#else
    typedef UCHAR DOT11_MAC_ADDRESS[6];
    typedef DOT11_MAC_ADDRESS * PDOT11_MAC_ADDRESS;
#endif

#ifdef __midl
// use 4-byte enum
typedef [v1_enum] enum _DOT11_PHY_TYPE {
#else
typedef enum _DOT11_PHY_TYPE {
#endif
    dot11_phy_type_unknown = 0,
    dot11_phy_type_any = dot11_phy_type_unknown,
    dot11_phy_type_fhss = 1,
    dot11_phy_type_dsss = 2,
    dot11_phy_type_irbaseband = 3,
    dot11_phy_type_ofdm = 4,
    dot11_phy_type_hrdsss = 5,
    dot11_phy_type_erp = 6,
    dot11_phy_type_IHV_start = 0x80000000,
    dot11_phy_type_IHV_end = 0xffffffff
} DOT11_PHY_TYPE, * PDOT11_PHY_TYPE;

#define DOT11_RATE_SET_MAX_LENGTH              126 // 126 bytes
typedef struct _DOT11_RATE_SET {
    ULONG uRateSetLength;
    __field_ecount_part(DOT11_RATE_SET_MAX_LENGTH, uRateSetLength) UCHAR ucRateSet[DOT11_RATE_SET_MAX_LENGTH];
} DOT11_RATE_SET, * PDOT11_RATE_SET;

typedef struct _WLAN_BSS_ENTRY {
    DOT11_SSID dot11Ssid;
    ULONG uPhyId;
    DOT11_MAC_ADDRESS dot11Bssid;
    DOT11_BSS_TYPE dot11BssType;
    DOT11_PHY_TYPE dot11BssPhyType;
    LONG lRssi;
    ULONG uLinkQuality;
    BOOLEAN bInRegDomain;
    USHORT usBeaconPeriod;
    ULONGLONG ullTimestamp;
    ULONGLONG ullHostTimestamp;
    USHORT usCapabilityInformation;
    ULONG ulChCenterFrequency;
    WLAN_RATE_SET wlanRateSet;
    // the beginning of the IE blob
    // the offset is w.r.t. the beginning of the entry
    ULONG ulIeOffset;
    // size of the IE blob
    ULONG ulIeSize;
} WLAN_BSS_ENTRY, * PWLAN_BSS_ENTRY;

// struct WLAN_VARIABLE_SIZE_ARRAY defines a list of entries,
// each of which may have different size
typedef struct _WLAN_BSS_LIST {
    // The total size of the data in BYTE
    DWORD dwTotalSize;
    DWORD dwNumberOfItems;
    WLAN_BSS_ENTRY wlanBssEntries[1];
} WLAN_BSS_LIST, *PWLAN_BSS_LIST;
So das waren eigentlich alle ! Ich hoffe du kannst mir Helfen.

Flocke 19. Okt 2006 15:27

Re: WLan API Übersetztung ?
 
Deine Arrays sind an etlichen Stellen ein Element zu groß. Die C-Deklaration
Code:
TYP x[5]
bedeutet in Delphi
Delphi-Quellcode:
x: array [0 .. 4] of TYP;
Z.B. an den Stellen:
Delphi-Quellcode:
ucSSID: array [0..NDU_DOT11_SSID_MAX_LENGTH] of UCHAR;
ucDot11MacAddress: array [0..6] of UCHAR;
usRateSet: array [0..NDU_DOT11_RATE_SET_MAX_LENGTH] of SHORT;
Auch mit den Aufzählungstypen könntest du Probleme bekommen - die sind in C nämlich immer 4 Byte groß und in Delphi nicht. Dafür müsstest du dann "{$MINENUMSIZE 4}" hinzufügen.

nitschchedu 19. Okt 2006 15:31

Re: WLan API Übersetztung ?
 
OK bei der MAC Adresse hate ich es vergessen aber die Anderen

Delphi-Quellcode:
NDU_DOT11_SSID_MAX_LENGTH
..
und so weiter
Habe ich schon immer eins abgezogen.
was meist du mit den Aufzählungstypen kannst da mal zeigen wie ich es richtig machen kann ?

ste_ett 20. Okt 2006 07:33

Re: WLan API Übersetztung ?
 
Einfach oben in die Unit
Delphi-Quellcode:
{$MINENUMSIZE 4}
schreiben.

nitschchedu 20. Okt 2006 10:35

Re: WLan API Übersetztung ?
 
Mal jetzt Allgemein die Übersetztung damit ich euch nicht immer auf die Nerven gehe. :wink:
Delphi-Quellcode:
ULONG                 --> ??
LONG                 --> Vieleicht LongInt ? 
UCHAR                --> ??
SHORT                --> ??
0x0000000f           --> Vieleicht $0000000f ?
unsigned int        --> ??
void *               --> War das nicht Pointer ?
unsigned long long  --> ??
unsigned __int64         --> Vieleicht Int64 ?
char                    --> Char
char *                   --> PChar
unsigned char          --> ??
union { .. }           --> Wie Übersetzt man den das ?
unsigned short           --> ??
void                     --> ?? Auch ein Pointer?
unsigned char *          --> ??
DWORD                   --> DWORD
WCHAR                   --> ??
BYTE                    --> Byte
ULONG                   --> ??
USHORT                  --> ??
BOOL                    --> Bool
BOOLEAN                 --> Boolean
ULONGLONG                --> ??
#define WLAN_READ_ACCESS   ( STANDARD_RIGHTS_READ | FILE_READ_DATA ) --> Wie Übersetzte ich das ?
PVOID                   --> ??
HANDLE                  --> THandle
LPCWSTR                 --> ??
PBYTE *                  --> Pointer auf Pointer Byte ??

__deref_out_bcount()    --> Habe keine Ahnung was das ist ??
__in                    --> Bestimmt var ?
__out                   --> Bestimmt out ?
__reserved              --> ??
__in_opt               --> ??
__deref_out             --> ??
Wenn ich das Alles Weiß Brauche ich erstmal nicht mehr so schnell Hilfe ! :bounce1:

Neutral General 20. Okt 2006 10:47

Re: WLan API Übersetztung ?
 
Zitat:

ULONG --> Cardinal
LONG --> Integer
UCHAR = unsigned char --> ka
SHORT --> ShortInt
0x0000000f --> $0000000F
unsigned int --> Cardinal
void * --> War das nicht Pointer ?
unsigned long long = ULONGLONG --> auch Longword ?^^
unsigned __int64 --> ne kein Int64 aber ka was o.O
char --> Char
char * --> PChar?^^
union { .. } --> Wie Übersetzt man den das ?

void --> ?? Auch ein Pointer?
unsigned char * --> ??
DWORD --> DWORD
WCHAR --> WideChar
BYTE --> Byte
USHORT = unsigned short --> Word
BOOL --> Bool
BOOLEAN --> Boolean
--> ?
#define WLAN_READ_ACCESS ( STANDARD_RIGHTS_READ | FILE_READ_DATA ) --> Wie Übersetzte ich das ?
PVOID --> PPointer?!
HANDLE --> THandle
LPCWSTR --> ??
PBYTE * --> Pointer auf Pointer Byte ??

__deref_out_bcount() --> Habe keine Ahnung was das ist ??
__in --> Bestimmt var ?
__out --> Bestimmt out ?
__reserved --> ??
__in_opt --> ??
__deref_out --> ??
Ehm hab mal paar Sachen zusammengefasst... Ich würde das jetzt etwa so übersetzen.. Kann das zwar selbst nicht wirklich aber so ausm Gefühl ... ka :|

Gruß
Neutral General

pacman1986 20. Okt 2006 10:53

Re: WLan API Übersetztung ?
 
void ist eigentlich für prozeduren gedacht (prozeduren nicht funktionen) wenn ich mich nicht irre

nitschchedu 20. Okt 2006 12:14

Re: WLan API Übersetztung ?
 
Soll ich da dann procedure davor schreiben oder wie ?

Klaus01 20. Okt 2006 12:17

Re: WLan API Übersetztung ?
 
void kennzeichen Funktionen ohne Rückgabewert, sind als mehr oder weniger Prozeduren

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr.
Seite 3 von 8     123 45     Letzte »    

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