DUN エントリを作成しようとしています。
null の lpRasEntry パラメータを使用して RasGetEntryProperties を呼び出しています。これにより、lpdwEntryInfoSize パラメータで構造サイズが返されます。代わりに、エラー - ERROR_INVALID_SIZE を返します。
RasGetEntryProperties 関数を呼び出して RasEntry 構造体のサイズを取得するにはどうすればよいですか?
ドキュメントには、レコードのフィールドが正しくないError_Invalid_Size
場合のエラーであると記載されています。関数がそのフィールドを読み取ることができた場合、あなたが主張したように、パラメーターに null ポインターを提供しませんでした。Microsoft のドキュメントには「null」と記載されていますが、Delphi では、予約語はヌル ポインタを示します。という名前の関数と混同しないでください。特別な値を指定します。dwSize
RasEntry
lpRasEntry
nil
Null
Variant
ドキュメントに基づいて、次のようなコードが必要です。
var
RasEntry: PRasEntry;
RasBufferSize: DWord;
Res: DWord;
begin
RasBufferSize := 0;
Res := RasGetEntryProperties(nil, '', nil, @RasBufferSize, nil, nil);
if Res <> Error_Success then
RaiseLastOSError(Res);
RasEntry := AllocMem(RasBufferSize);
try
RasEntry.dwSize := SizeOf(TRasEntry);
Assert(RasEntry.dwSize <= RasBufferSize);
Res := RasGetEntryProperties(nil, '', RasEntry, @RasBufferSize, nil, nil);
finally
FreeMem(RasEntry);
end;
end;
関数に必要なバッファーのサイズを尋ねてから ( をRasBufferSize
参照)、それが満たすと予想されるバッファーのサイズを関数に伝えます ( をRasEntry.dwSize
参照)。このdwSize
フィールドは、受け取る予定の構造体のバージョンを関数に伝えます。