Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi array of WideChar leer? (https://www.delphipraxis.net/79704-array-widechar-leer.html)

EConvertError 26. Okt 2006 18:17


array of WideChar leer?
 
Hallo!

Ich hole mir mit der Funktion GetIfTable die Daten meiner Netzwerkadapter.
Dazu nutze ich die IpHlpApi mit den JEDI-Header-Files.

Leider komme ich aber nicht an pIfTable^.table[I].wszName ran. Egal was ich mache, ich erhalte immer einen leeren String.

Der Typ von pIfTable^.table[I]:
Delphi-Quellcode:
wszName: array [0..MAX_INTERFACE_NAME_LEN - 1] of WCHAR;
Mein Code:
Delphi-Quellcode:
  try
    pIfTable := AllocMem(Size);
    if GetIfTable(pIfTable, Size, True) = ERROR_SUCCESS then
    for I := 0 to pIfTable^.dwNumEntries - 1 do
    begin
      pIfTable^.table[I].wszName // <-- Das will ich auswerten.
    end;
  finally
    FreeMem(pIfTable);
  end;
Alle anderen Daten sind in Ordnung. Einzig und allein wszName bereitet Sorgen. Wie komme ich an die Daten von wszName ran?

Vielen Dank für eure Hilfe,
Andreas

DGL-luke 26. Okt 2006 18:23

Re: array of WideChar leer?
 
Delphi-Quellcode:
function IsWideCharArrayEmpty(w: array of WideChar): Boolean;
begin
  Result := (length(w)=0) or (w[0] = #0); //relies on lazy bool evaluation!
end;
Da ich mit Widechars normalerweise nicht hantiere, weiß ich nicht, ob das so reicht.

EConvertError 26. Okt 2006 18:48

Re: array of WideChar leer?
 
Vielen Dank!

Das ist interessant. Wenn ich deine Funktion auf mein array anwende, erhalte ich "true".

Ich verstehe nicht, wie das array leer sein kann? Ist es normal, dass Netzwerkschnittstellen keinen Namen haben?

Ich werde wohl Description stattdessen verwenden, denn da bekomme ich einen vernünftigen Wert...

Danke,
Andreas

DGL-luke 26. Okt 2006 18:53

Re: array of WideChar leer?
 
Ich gehe davon aus, dass auch bei Widechars ein Null-Char (#0? #0#0?) als Terminator benutzt wird. Wenn aber Delphi jetzt nur hergeht, und den Widechar, der sich aus den zwei Bytes "#0#xx" zusammensetzt, nur auf das erste byte überprüft - dann ist natürlich Schicht im Schacht. Warte also besser, bis himitsu oder ein ähnlich kompetenter user sich der Sache annimmt ;)

EConvertError 26. Okt 2006 18:59

Re: array of WideChar leer?
 
Verstehe.

Na dann warte ich mal, ob noch jemand eine Idee hat. :wink:


Vielen Dank,
Andreas

Flocke 26. Okt 2006 19:55

Re: array of WideChar leer?
 
Auch bei Unicode (WideChar) wird das Stringende mit #0 markiert, es steht also kein Name drin. Vielleicht ist das ja auch korrekt so. Schon mal die restlichen Daten der Struktur ausgewertet?

marabu 26. Okt 2006 20:23

Re: array of WideChar leer?
 
Nur am Rande:

Delphi-Quellcode:
 
if pIfTable^.table[I].wszName <> '' then
  ShowMessage('interface name: ' + pIfTable^.table[I].wszName);
Das ist völlig ausreichend.

Grüße vom marabu

EConvertError 27. Okt 2006 13:22

Re: array of WideChar leer?
 
Vielen Dank!

Das ist seltsam, aber damit muss ich wohl leben. Keiner meiner beiden Netzwerkadapter hat somit einen Namen. :gruebel:
Ich werde Description stattdessen verwenden.

Zitat:

Zitat von Flocke
Auch bei Unicode (WideChar) wird das Stringende mit #0 markiert, es steht also kein Name drin. Vielleicht ist das ja auch korrekt so. Schon mal die restlichen Daten der Struktur ausgewertet?

Die restlichen Daten der Struktur werden ausgewertet und enthalten auch die korrekten Informationen.

Vielen Dank,
Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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