![]() |
array [0..0] ?
Also aus meiner WlanAPI habe ich aus der Übersetztung ein Array das so ist:
Delphi-Quellcode:
Jetzt ist aber immer nur ein Feld drin :(
Network: array[0..0] of Tndu_WLAN_AVAILABLE_NETWORK;
Ich habe mal Test weiße das so gemacht
Delphi-Quellcode:
Und da waren nun 3 Feld ausgfühlt.
Network: array[0..2] of Tndu_WLAN_AVAILABLE_NETWORK;
Wie bekomme ich das hin das das mit dem array[0..0] richtig klapt ? |
Re: array [0..0] ?
Was willst du den erreichen 0..0 heißt nunmal nur 1 Element
|
Re: array [0..0] ?
Hi,
was ist genau dein Problem? wenn du
Delphi-Quellcode:
deklarierst, hast du nur ein feld, und zwar
myArray = array[0..0]
Delphi-Quellcode:
deklarierst du hingegen
myArray[0]
Delphi-Quellcode:
hast du drei felder
myArray = array[0..2]
Delphi-Quellcode:
Gruß
myArray[0] myArray[1] myArray[2]
[edit=schöner machen /] |
Re: array [0..0] ?
Also in C++ sa es so aus:
Code:
Man gab mir den hniweiß ich solle es so übersetzten:
typedef struct _WLAN_INTERFACE_INFO_LIST {
DWORD dwNumberOfItems; DWORD dwIndex; #ifdef __midl [unique, size_is(dwNumberOfItems)] WLAN_INTERFACE_INFO InterfaceInfo[*]; #else WLAN_INTERFACE_INFO InterfaceInfo[1]; #endif
Delphi-Quellcode:
Ich war in der Annahme das da mehr als nur ein Feld kommt !?
Network: array[0..0] of Tndu_WLAN_AVAILABLE_NETWORK;
|
Re: array [0..0] ?
jetzt glaube ich ein bisschen zu wissen, worauf du hinaus willst... kenne mich in c halt gar nicht aus ;)
mit mehr Felder meinst du dwNumberOfItems und dwIndex? dann brauchst du aber eigentlich kein array, irgendwas ist da falsch glaub ich... :gruebel: versuch doch mal
Delphi-Quellcode:
var
Network: Tndu_WLAN_AVAILABLE_NETWORK; begin tu was mit Network.dwNumberOfItems; tu was mit Network.dwIndex; end; |
Re: array [0..0] ?
Es handelt sich um eine dynamische Struktur
Delphi-Quellcode:
type
WLAN_INTERFACE_INFO_LIST = Record dwNumberOfItems: Cardinal; dwIndex: Array of Cardinal end; ... Network: WLAN_INTERFACE_INFO_LIST; setLength( network.dwindex, network.dwNumberOfItems); |
Re: array [0..0] ?
Und wie würde das hier aussehen ?
Delphi-Quellcode:
// Deklaration Pndu_WLAN_PROFILE_INFO_LIST = ^Tndu_WLAN_PROFILE_INFO_LIST; PPndu_WLAN_PROFILE_INFO_LIST = ^Pndu_WLAN_PROFILE_INFO_LIST; Tndu_WLAN_PROFILE_INFO_LIST = record dwNumberOfItems: DWORD; dwIndex: DWORD; ProfileInfo: array[0..0] of Tndu_WLAN_PROFILE_INFO; end; function WlanGetAvailableNetworkList(hClientHandle: Handle; const pInterfaceGuid: PGUID; dwFlags: DWORD; pReserved: PVOID; var pAvailableNetworkList: Pndu_WLAN_AVAILABLE_NETWORK_LIST): DWORD; stdcall; ... // Aufruf var netzworklist: Pndu_WLAN_AVAILABLE_NETWORK_LIST; .... begin back := WlanGetAvailableNetworkList(hClient, @pInterface.InterfaceInfo[0].InterfaceGuid, NDU_WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES, nil, netzworklist); end; |
Re: array [0..0] ?
Diese Deklaration kann so richtig sein. Es ist der prinzipielle Hinweis, dass es sich um ein statisches Array handelt, von dem man allerdings die Länge nicht kennt. Meistens steht die Länge an einer anderen Stelle (wie man an deinem C-Code auch sieht).
du kannst jetzt auf verschiedene Art an den Feldinhalt kommen: 1. Du definierst dir ein statisches Array, was groß genug ist, und benutzt eben nur die ersten NumberOfItems Elemente. 2. Du nimmst einen Pointer von WLAN_INTERFACE_INFO und gehst damit durch die Liste. 2. ist meistens schöner und könnte so aussehen:
Delphi-Quellcode:
Je nach Gegebenheit gibt es auch noch andere Lösungen...
type PINTERFACE_INFO=^INTERFACE_INFO
INTERFACE_INF0=packed record //...was auch immer end; type WLAN_INTERFACE_INFO_LIST=packed record dwNumberOfItems:DWORD; dwIndex:DWORD; WLAN_INTERFACE_INFO:array[0..0] of INTERFACE_INFO; end; //... var i:integer; PInfo:PInterface_Info; begin PInfo:=@InfoList.WLAN_Interface_Info; for i:=1 to InfoList.numberofitems do begin PInfo^.xyz //zugriff auf das Feld inc(PInfo); //aufs nächste Feld schieben end; end; |
Re: array [0..0] ?
Diese Zuweißung geht nicht wirklich
Delphi-Quellcode:
Mein Code:
PInfo:=@InfoList.WLAN_Interface_Info;
Delphi-Quellcode:
Fehler beim "<---" = Inkompatiple Typen
Pndu_WLAN_AVAILABLE_NETWORK_LIST = ^Tndu_WLAN_AVAILABLE_NETWORK_LIST;
PPndu_WLAN_AVAILABLE_NETWORK_LIST = ^Pndu_WLAN_AVAILABLE_NETWORK_LIST; Tndu_WLAN_AVAILABLE_NETWORK_LIST = record dwNumberOfItems: DWORD; dwIndex: DWORD; Network: array[0..0] of Tndu_WLAN_AVAILABLE_NETWORK; end; var netzworklist: Pndu_WLAN_AVAILABLE_NETWORK_LIST; Netzwork: Tndu_WLAN_AVAILABLE_NETWORK; begin .... netzworklist := WlanAllocateMemory(SizeOf(Tndu_WLAN_AVAILABLE_NETWORK_LIST)); back := WlanGetAvailableNetworkList(hClient, @pInterface.InterfaceInfo[0].InterfaceGuid, //NDU_WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES, 0, nil, netzworklist); Netzwork := @netzworklist^.Network; <--- for i := 0 to netzworklist^.dwNumberOfItems - 1 do begin Memo1.Lines.Add(Netzwork.strProfileName); inc(Netzwork); end; |
Re: array [0..0] ?
:oops: da fehlt anscheinend noch ein [0] dahinter und evtl noch ein pointer(...) drumrum
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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