AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Unicode-Probleme beim Auflisten von RAS-Verbindungen (RasGetEntryProperties)
Thema durchsuchen
Ansicht
Themen-Optionen

Unicode-Probleme beim Auflisten von RAS-Verbindungen (RasGetEntryProperties)

Ein Thema von CodeX · begonnen am 5. Dez 2013
Antwort Antwort
CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#1

Unicode-Probleme beim Auflisten von RAS-Verbindungen (RasGetEntryProperties)

  Alt 5. Dez 2013, 13:47
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?
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz