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 Unicode-Probleme beim Auflisten von RAS-Verbindungen (RasGetEntryProperties) (https://www.delphipraxis.net/177914-unicode-probleme-beim-auflisten-von-ras-verbindungen-rasgetentryproperties.html)

CodeX 5. Dez 2013 12:47

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:
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;
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.
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:
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';
Hat jemand eine Idee, wie sich das Problem lösen lässt?


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