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?