![]() |
Unicode-Probleme beim Auflisten von RAS-Verbindungen (RasGetEntryProperties)
Ich möchte gerne, die lokalen RAS-Verbindungen auflisten. Dazu habe ich mir mit Hilfe der RAS-API-Header von Jedi etwas zusammengebastelt (aufs Nötigste gekürzt):
Delphi-Quellcode:
Das funktioniert auch prima, solange in den Verbindungsnamen keine Unicode-Zeichen auftauchen. Bei Unicode-Zeichen wird ein "?" ausgespuckt, was in der Folge zu Problemen führt.
var
ListRasEntryName: array of TRasEntryName; Err, SizeRasEntryName, NumEntries: DWORD; i : Integer; begin List.Clear; SetLength(ListRasEntryName, 1); SizeRasEntryName := SizeOf(TRasEntryName); ListRasEntryName[0].dwSize := SizeRasEntryName; Err := RasEnumEntries(nil, nil, @ListRasEntryName[0], SizeRasEntryName, NumEntries); if (Err = ERROR_BUFFER_TOO_SMALL) and (NumEntries > 0) then begin SetLength(ListRasEntryName, NumEntries); Err := RasEnumEntries(nil, nil, @ListRasEntryName[0], SizeRasEntryName, NumEntries); if Err = 0 then for i := 0 to Length(ListRasEntryName) do List.Add(ListRasEntryName[i].szEntryName); end; end; Erster Gedanke war natürlich, die Unicode-Pendants zu verwenden: TRasEntryNameW und RasEnumEntriesW. Aber damit bekomme ich leider nur Kauderwelsch raus. Nun weiß ich nicht, ob ich dafür noch mehr anpassen müsste oder ob vielleicht ein Fehler in den Header-Übersetzungen vorliegt. Wenn ich die Info-Datei richtig deute, sind die Header von 2000, also weit vor Delphi-Unicode-Zeit. Eine Änderung musste ich manuell machen, damit es zumindest als Ansi-Version funktioniert (s.u.). Das könnte die Vermutung stützen, dass noch irgendetwas anderes an den Headern falsch ist und zum Unicode-Problem führt.
Delphi-Quellcode:
Hat jemand eine Idee, wie sich das Problem lösen lässt?
function RasGetEntryPropertiesA(lpszPhonebook: PAnsiChar; lpszEntry: PAnsiChar;
lpRasEntry: PRasEntryA; var lpdwEntryInfoSize: DWORD; lpbDeviceInfo: Pointer; lpdwDeviceInfoSize: PDWORD): DWORD; stdcall; {$EXTERNALSYM RasGetEntryPropertiesA} function RasGetEntryPropertiesW(lpszPhonebook: PWideChar; lpszEntry: PWideChar; lpRasEntry: PRasEntryW; var lpdwEntryInfoSize: DWORD; lpbDeviceInfo: Pointer; lpdwDeviceInfoSize: PDWORD): DWORD; stdcall; {$EXTERNALSYM RasGetEntryPropertiesW} function RasGetEntryProperties(lpszPhonebook: PChar; lpszEntry: PAnsiChar; //Original: PChar lpRasEntry: PRasEntry; var lpdwEntryInfoSize: DWORD; lpbDeviceInfo: Pointer; lpdwDeviceInfoSize: PDWORD): DWORD; stdcall; {$EXTERNALSYM RasGetEntryProperties} [...] function RasGetEntryPropertiesA; external raslib name 'RasGetEntryPropertiesA'; function RasGetEntryPropertiesW; external raslib name 'RasGetEntryPropertiesW'; function RasGetEntryProperties; external raslib name 'RasGetEntryPropertiesA'; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 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